3 回答

TA貢獻1876條經驗 獲得超7個贊
您可能需要$stuff用引號引起來
if [ -f "$stuff" ]; then
通常,您幾乎總是希望在使用路徑名的地方都加上引號。
我發現將殼腳本中的變量或變量視為“宏”會更有用,這些變量在首次使用時會擴展為它們的值。這與幾乎所有其他編程語言中的變量都不同。
因此,如果$stuff包含hello world(請注意空格),則將與您鍵入的內容相同:
[ -f hello world ]
這顯然是一個錯誤。
在這種情況下,您提到要處理的文件不存在,因此$stuff實際上是空的,就像鍵入:
[ -f ]
這實際上是有效的,但始終會成功。test從POSIX規范中可以看出,這有點晦澀難懂,test如果只有一個參數(在這種情況下,參數為-f),則總是成功:
1個參數:
如果$ 1不為null,則退出true(0);否則為0。否則,退出false。
這可能是為了便于編寫:
[ $variable_that_may_or_may_not_be_defined ]
如果添加引號,則傳遞兩個參數,然后發生更多理智的事情:
if [ -f "" ]; then

TA貢獻1846條經驗 獲得超7個贊
$stuff正如Carpetsmoker所說,一種選擇是加引號。
但是由于這被標記為bash,并且由于在文件名中包含空格是很痛苦的,所以您可以這樣做:
if [[ -f $stuff ]]
相對于[,它的別名是test,該[[結構“知道”如何$stuff正確處理內容。
- 3 回答
- 0 關注
- 575 瀏覽
添加回答
舉報