爲什麼我看到的每個示例都有while IFS= read line
而不是while IFS=; read line
?其中是'while IFS = read line`記錄的語法?
我以爲name=value command
可能會設置一個本地變量,但sentence="hello" echo $sentence
不起作用,而sentence="hello"; echo $sentence
呢。
爲什麼我看到的每個示例都有while IFS= read line
而不是while IFS=; read line
?其中是'while IFS = read line`記錄的語法?
我以爲name=value command
可能會設置一個本地變量,但sentence="hello" echo $sentence
不起作用,而sentence="hello"; echo $sentence
呢。
的:
name=value command
語法設置name
到value
爲command
。在你的例子中:
$ sentence="hello" echo $sentence
$語句被調用shell擴展,它看不到設置。如果你
$ sentence="hello" sh -c 'echo $sentence'
(注意單引號都被稱爲殼擴大了$
),它會呼應hello
。如果你嘗試
$ sentence="hello"; sh -c 'echo $sentence'
也不會迴應任何事情,因爲sentence
在當前shell設置,但不在被叫之一,因爲它並沒有出口。所以
IFS=; read line
將不的工作,因爲read
將不看到IFS
設置。
爲參數賦值命令添加前綴會影響正在執行的命令的環境。
在man bash
:
任何簡單的命令或功能的環境可以被 通過與參數分配前綴它,如在參數描述 上述 增強 暫時。這些賦值語句僅影響該命令看到的 環境。
在您的例子:sentence="hello" echo $sentence
,sentence
將在echo
命令的環境(試試這個展現自己:sentence=HI env | fgrep sentence
),但不是在您從中調用它的外殼,這將需要通過當您嘗試時,它作爲echo
的參數。
微妙。謝謝! – nachocab
+1很好的解釋 –