2013-05-31 43 views
3

我正在寫一個簡單的bash腳本,並希望顯示一個特定目錄中的所有項目。我試圖做以下幾點:沒有這樣的文件或目錄(LS)與代字號擴展

desktop="~/Desktop/testr/" 
echo $desktop 
echo `ls $desktop` 

不過,我不斷收到輸出:

~/Desktop/testr/ 
ls: ~/Desktop/testr/: No such file or directory 

但是,當我從終端運行ls,我能看到的物品。我懷疑問題是~沒有得到擴展,但我認爲雙引號可以解決這個問題。

感謝您的幫助!

回答

10

這是因爲在引用的字符串中沒有代字符擴展,代字符擴展出現在回波行中的參數替換之前。

擴展的序列爲:

  1. 波浪線擴展
  2. 參數擴展
  3. 命令替換
  4. 算術擴展
  5. 場分裂
  6. 路徑擴展
  7. 報價去除

查看POSIX Shell Specification on Word Expansions爲血淋淋的細節。

+1

你會推薦什麼 - 使用$ HOME? –

+1

我不知道,謝謝!我始終覺得代字擴展仍然會出現在雙引號中,但不是單引號。刪除引號解決了它。謝謝! – babaloo

+1

@ChrisStratton是的,使用$ HOME是我所做的。除非真的搞砸了,否則應該設置。但請注意,它只適用於你自己的家 - 你不能用它替換'〜用戶名'。 – Jens

相關問題