我試圖做類似在bash中讀取多行而不產生新的子shell?
var=0
grep "foo" bar | while read line; do
var=1
done
不幸的是這不起作用,因爲管道引起,而在子shell中運行。有一個更好的方法嗎?如果還有其他解決方案,我不需要使用「閱讀」。
我看過Bash variable scope這是相似的,但我無法從它得到任何工作。
我試圖做類似在bash中讀取多行而不產生新的子shell?
var=0
grep "foo" bar | while read line; do
var=1
done
不幸的是這不起作用,因爲管道引起,而在子shell中運行。有一個更好的方法嗎?如果還有其他解決方案,我不需要使用「閱讀」。
我看過Bash variable scope這是相似的,但我無法從它得到任何工作。
如果你真的在做簡單的事情,你甚至不需要while read
循環。下面將工作:
VAR=0
grep "foo" bar && VAR=1
# ...
如果你真的需要循環,因爲其他東西都在循環中發生的事情,你可以從一個<(commands)
進程替換重定向:
VAR=0
while read line ; do
VAR=1
# do other stuff
done < <(grep "foo" bar)
(名單)?這不是所謂的流程替代嗎? http://tldp.org/LDP/abs/html/process-sub.html – pihentagy 2013-06-10 07:23:47
那麼就不要使用管,而失去的grep
var=1
while read line
do
case "$line" in
*foo*) var=1
esac
done <"file"
echo "var after: $var"
這是http://mywiki.wooledge.org/BashFAQ/024 – tripleee 2016-07-19 17:42:11