Bash
定義帶引號或不帶引號的變數有什麼區別?
如果我用引號定義一個變數:
TEMP="~/Dropbox"
然後
ls $TEMP
行不通,而是
echo $TEMP | ls
作品。
為了得到同樣的結果,我還可以定義不帶引號的變數,比如:
TEMP=~/Dropbox
通過這樣做,我可以簡單地輸入
ls $TEMP
我對它們之間的區別感到很困惑,我想知道我應該在何時何地分別使用這兩種定義?
TEMP="~/Dropbox"
上面定義了一個變數,該變數包含一個文字波浪號,後跟一個斜杠。因為它是用引號引起來的,所以 shell 不會擴展
~/
到主目錄。觀察:$ echo "quotes=~/" noquotes=~/ quotes=~/ noquotes=/home/john1024/
因此,如果您要
~/
表示主目錄,則~/
需要在引號之外。以下作品:TEMP=~/"Dropbox"
讓我們考慮一下如果
~/
在引號中會發生什麼:TEMP="~/Dropbox" ls $TEMP
上面的命令將查找文件,
~/Dropbox
這意味著在名為Dropbox
的目錄中命名的文件~
。由於您很可能沒有名為 的目錄~
,ls
因此將返回錯誤消息:“沒有這樣的文件或目錄。”此外,下面的命令並沒有按照您的想法執行:
echo $TEMP | ls
ls
忽略標準輸入。裸ls
命令僅列出目前目錄中的文件,無論該目錄是什麼。