Я пытаюсь сделать что-то как
var=0
grep "foo" bar | while read line; do
var=1
done
К сожалению, это не работает, так как канал вызывает, в то время как работать в подоболочке. Существует ли лучший способ сделать это? Я не должен использовать "чтение", если существует другое решение.
Я посмотрел на объем переменной Bash, который подобен, но я не мог получить ничего, что работало от него.
Если вы действительно делаете что-то настолько упрощенное, вам даже не нужен цикл while read
. Сработает следующее:
VAR=0
grep "foo" bar && VAR=1
# ...
Если вам действительно нужен цикл, потому что в цикле происходят другие вещи, вы можете перенаправить с <( команды )
подстановку процесса:
VAR=0
while read line ; do
VAR=1
# do other stuff
done < <(grep "foo" bar)
, тогда не используйте канал , и потеряйте grep
var=1
while read line
do
case "$line" in
*foo* ) var=1
esac
done <"file"
echo "var after: $var"