第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Bash檢查是否顯示文件不存在?

Bash檢查是否顯示文件不存在?

手掌心 2020-02-02 15:04:06
在bash中運(yùn)行以下命令:   stuff=`rpm -ql <some package> | grep dasdasdfd`(軟件包中不存在的文件,退出代碼= 1,stdout為空)  if [ -f $stuff ]; then echo "whaaat"; fi上面的命令檢查文件是否存在...但是:file $stuff只需打印文件的使用信息...,然后stat $stuff缺少操作數(shù)...有人可以解釋為什么嗎?這是一個(gè)錯(cuò)誤嗎?難道我做錯(cuò)了什么?我只想確保包中的文件存在于fs上
查看完整描述

3 回答

?
幕布斯6054654

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


查看完整回答
反對(duì) 回復(fù) 2020-02-02
?
喵喵時(shí)光機(jī)

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)容。


查看完整回答
反對(duì) 回復(fù) 2020-02-02
  • 3 回答
  • 0 關(guān)注
  • 570 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)