※ 引述《mkl0301.bbs@ptt.cc (mkl)》之銘言:
> 最近看了一個shell script,
> 用到command substitution,
> 結果在試command時遇到下面的問題...
> Command substitution
> $(...) or `...`
> Nested command substitution
> ls -al $(echo $(ls $(pwd)))
> 下面這個會成功
> C2QSERVER lsdk # echo $(a=b;echo $a)=c;echo $b
> b=c
這個也不對吧,你誤解意思。
那是先跑 a=b 與 echo $a,所以結果是 b。最後展開執行顯示該字串:
echo b=c
而 b 變數本來就沒東西,所以顯示空字串內容。這個 b 沒有任何意義可言。
> 這個則會失敗
> C2QSERVER lsdk # $(a=b;echo $a)=c;echo $b
> bash: b=c: command not found
> 為甚麼? 有人知道原因嘛?
> 謝謝
bash shell 只有認識直接的 a=b 這種語法是變數設定,所以你的 a 是變數
可以變動的話,請愛用 eval 代為帶入展開即可。ex:
eval $(a=b;echo $a)=c;echo $b
--
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
現代人普遍的現象: 「小學而大遺」、「捨本而逐末」
「以偏而概全」、「因噎而廢食」
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: kendlee.sayya.org