回文章列表
作者kenduest.bbs@bbs.sayya.org (小州) 看板: linux
標題Re: [問題] Bash的nested command substitution?
時間SayYA 資訊站 (2008/03/20 Thu 23:16:34)
※ 引述《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
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻