Изменить:
Мой комментарий ниже относительно sed @ ^ @ @ '<(f1)
неверен
Хотя $ BASH_SUBSHELL
указывает, что мы находимся на том же уровне, что и запуск, переменные теряются в основном скрипте.
на основе ответа Гордона я протестировал f1>> (sed ' s @ ^ @ @')
, и это, похоже, работает правильно. Тем не менее, не следует ли BASH_SUBSHELL быть 1, а не 0 для первой формы?
Рассмотрим этот небольшой тест
#!/bin/bash
declare -i i=0
function f1()
{
let i++
echo "In f1, SUBSHELL: $BASH_SUBSHELL, i=$i" >&2
}
f1
f1 | sed 's@^@ @'
echo "at end, i=$i"
со следующим выводом:
In f1, SUBSHELL: 0, i=1
In f1, SUBSHELL: 1, i=2
at end, i=1
(цель sed
- просто есть канал к чему-то, не ожидайте, что он что-то сделает, потому что f1 выводит на stderr)
Функция f1 регистрирует текущий BASH_SUBSHELL и текущее значение i
Я знаю, почему в конце сценария мы получаем i = 1
, потому что второй вызов был в подоболочке, а значение i в подоболочке 1 было потеряно.
Что я не делаю 's @ ^ @ @ '<(f1) Я хотел бы знать, почему левая сторона не находится на том же уровне, что и основной скрипт