編輯:管子的左側是子殼?
下面關於sed '[email protected]^@ @' <(f1)
我的評論是不正確 雖然$BASH_SUBSHELL
表明我們是在同一水平發射,變量在主腳本丟失。 基於戈登答案我測試了f1 > >(sed '[email protected]^@ @')
而不是這似乎工作正常。但是,對於第一種形式,不應該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 '[email protected]^@ @'
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_SUBSH ELL和我
我知道爲什麼在腳本的末尾,我們得到i=1
的電流值,其因爲第二次調用是在一個子shell,我在殼層1的值丟失。
什麼我不知道的是,爲什麼管的左側在當前shell
雖然我想,我可以sed '[email protected]^@ @' <(f1)
我想避免這種情況知道爲什麼左側是未執行與主腳本不在同一級別
我覺得shell允許在子shell中有管道的兩端 – sehe 2011-04-22 22:32:54
快速谷歌發現這個:http://www.linuxprogrammingblog.com/pipe-in-bash-can-be-a-trap – 2011-04-22 22:37:28
@布賴恩那篇文章沒有討論管道的左側...我已經知道這對管道右側的變量賦值是個壞消息 – nhed 2011-04-22 22:51:54