3 回答

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

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
$stuff正如Carpetsmoker所說,一種選擇是加引號(hào)。
但是由于這被標(biāo)記為bash,并且由于在文件名中包含空格是很痛苦的,所以您可以這樣做:
if [[ -f $stuff ]]
相對(duì)于[,它的別名是test,該[[結(jié)構(gòu)“知道”如何$stuff正確處理內(nèi)容。
- 3 回答
- 0 關(guān)注
- 570 瀏覽
添加回答
舉報(bào)