2011-12-07 27 views
33

「〜/桌面/ test.txt的:沒有這樣的文件或目錄」 我寫這個劇本

#!/bin/bash 

file="~/Desktop/test.txt" 
echo "TESTING" > $file 

的腳本不工作;它給了我這個錯誤:

./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory 

我在做什麼錯?

+0

我改變了標題,使其更具描述性。 –

+0

[Tilde擴展不能在Bash中工作]的可能的重複(https://stackoverflow.com/questions/5748216/tilde-expansion-not-working-in-bash) – codeforester

回答

53

嘗試用$HOME代替~。只有當代字號不加引號時纔會出現傾斜擴展。見info "(bash) Tilde Expansion"

你也可以在不引用它的情況下做file=~/Desktop,但是如果你用某個字段分隔符代替它的一部分,那麼它將會中斷。無論如何,引用變量的值可能是一個好習慣。引用變量file=~/"Desktop"也可以工作,但我認爲這相當難看。

在可能的情況下更喜歡$HOME的另一個原因:波浪擴展只發生在單詞的開頭。因此command --option=~/foo只有在command代表擴展本身時纔會起作用,這將根據命令而有所不同,而command --option="$HOME/foo"將始終有效。

+0

哇,這工作!這是怎麼回事,我的腳本沒有? – Mason

+1

已更新的答案。 –

+4

@Mason - 另外,波形擴展發生在變量擴展之前,所以當'$ file'被轉換爲'〜/ Desktop/test.txt'時,你已經錯過了波浪號擴展階段。有關擴展順序,請參閱http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions。 –

1

僅供參考,您也可以使用eval

eval "echo "TESTING" > $file" 

eval取指令作爲一個參數,它會導致外殼做Tilde expansion

相關問題