Bash
Bash 中的變數擴展
我嘗試了以下命令
variable='one|name' echo $variable
輸出是
one|name
而
echo one|name
給出一個錯誤No command 'name' found
。這是合理的,因為 bash 將|
其視為管道並嘗試將命令作為輸入name
執行。one
但是為什麼要
echo $variable
列印one|name
?Parameter 和 Variable 展開後,不應該等價於echo one|name
?版本:
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
不,它不應該,因為
bash
操作命令的方式。鍵入時
echo one|name
,bash
解析命令,將|
其視為管道令牌,因此|
執行管道。鍵入時
echo $variable
,由於在變數擴展之前發生了令牌解析,因此bash
將命令解析為兩部分,echo
而$variable
. 之後,它執行變數擴展,擴展$variable
為one|name
。在這種情況下,one|name
是一個字元串,|
是字元串的一部分並且不能被視為一個管道令牌(當然,令牌辨識片語已經完成)。IFS
如果變數 contains|
,它唯一可以是特殊的,bash
將|
用作分隔符來執行欄位拆分:$ variable='one|name' $ IFS='|' $ echo $variable one name