這確實很簡單,但我似乎無法弄清楚。任何想法當我通過變量執行相同的命令有什麼錯誤?基於代碼的變數
這個工程:
$ echo `git --version | cut -d' ' -f3`
1.8.4
但這並不:
$ c="git --version | cut -d' ' -f3"
$ echo `$c`
git version 1.8.4
任何想法?
這確實很簡單,但我似乎無法弄清楚。任何想法當我通過變量執行相同的命令有什麼錯誤?基於代碼的變數
這個工程:
$ echo `git --version | cut -d' ' -f3`
1.8.4
但這並不:
$ c="git --version | cut -d' ' -f3"
$ echo `$c`
git version 1.8.4
任何想法?
我沒有確切的理由在我的指尖,但是...你不能那樣做。
管道和重定向似乎特別特別。
然而,eval
將做的工作:
$ c="git --version | cut -d' ' -f3"
$ eval "$c"
1.7.5.4
您的代碼:
c="git --version | cut -d' ' -f3"
echo `$c`
是等價的:
git --version "|" cut -d' ' -f3
由於管道字符是一個變量裏面,它不會被評估爲shell元字符,它的效果與在comm上鍵入它相同並用引號或反斜線來轉義它。這種情況很容易看到,如果你用這個來代替:
c="echo a b c | wc -w"
echo `$c`
由於已經發布,答案是使用「EVAL」這樣的外殼擴展變量,然後試圖執行它作爲殼源,然後像元字符管道將被識別。