簡體   English   中英

Cygwin Bash中的命令行變量賦值不起作用?

[英]Command-line variable assignments in Cygwin Bash not working?

根據Bash手冊的3.7.1節,命令行開頭的變量賦值對於調用的程序應該是可見的。

例如

DIR=/tmp ls $DIR

應該表現得好像我輸入了“ls / tmp” - 並且在執行命令后變量DIR不應該持續存在。

Cygwin Bash(GNU bash,版本3.2.51(24)-release(i686-pc-cygwin))似乎沒有這樣做 - 上面的命令表現得好像沒有定義$ DIR。 其他測試證實了這一點,例如“DIR = / tmp echo $ DIR”,“DIR = / tmp set”等。

請注意,添加分號有效(“DIR = / tmp; ls $ DIR”),但保留在命令后定義的變量。

為什么這不按預期工作?

它確實有效 - 但不是在你試圖讓它工作的環境中。

DIR=/tmp ls $DIR

環境變量DIR設置為ls - 但是當shell擴展命令的$ DIR時不設置。 這是Bourne shell的表現方式; 這是它的繼承者如Korn shell和Bash的表現方式。

您可以通過將ls $DIR更改為env來確定DIR已設置; 這將顯示外部(非內置)命令的環境。

在這個例子中,暫時考慮一下:你輸入的內容是9個額外的字符,而不是:

ls /tmp

如果你必須設置和刪除它,那么這就行了:

(DIR=/tmp; ls $DIR)

在shell評估ls $DIR之前設置變量,但整個命令在子shell中運行,因此它對調用shell沒有影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM