Bash

Bash 中的變數擴展

  • January 7, 2015

我嘗試了以下命令

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|namebash解析命令,將|其視為管道令牌,因此|執行管道。

鍵入時echo $variable,由於在變數擴展之前發生了令牌解析,因此bash將命令解析為兩部分,echo$variable. 之後,它執行變數擴展,擴展$variableone|name。在這種情況下,one|name是一個字元串,|是字元串的一部分並且不能被視為一個管道令牌(當然,令牌辨識片語已經完成)。IFS如果變數 contains |,它唯一可以是特殊的,bash|用作分隔符來執行欄位拆分:

$ variable='one|name'
$ IFS='|'
$ echo $variable
one name

引用自:https://unix.stackexchange.com/questions/177935