2015-05-08 198 views
1

試圖編寫一個簡單的腳本來複制OS X 10.9中的某些文件。 這裏的內容..shell腳本將文件從一個目錄複製到另一個目錄

SRC_DIR="~/Library/Preferences-Old" 

DST_DIR="~/Library/Preferences" 

FILEN="test.txt" 

cp $SRC_DIR/$FILEN $DST_DIR 

給我的輸出:

cp: ~/Library/Preferences-Old/test.txt: No such file or directory 

當然,以上是錯誤的。在終端中完全相同的cp命令直接做到這一點。我在這裏做錯了什麼?

+0

實際上刪除所有引號解決了問題!不知道這裏發生了什麼.. –

+0

這是所有關於理解引用。閱讀例如[bash引用](http://www.tldp.org/LDP/abs/html/quotingvar.html) –

+0

@ apil.tamang [shellcheck](http://www.shellcheck.net)有助於指出問題所在「[請注意〜不會用引號擴展。](https://github.com/koalaman/shellcheck/wiki/SC2088)」 –

回答

2

~是爲數不多的例外情況「有疑問時,引用」之一。正如其他人指出的,報價~不受擴張影響。但是,你仍然可以援引的字符串其餘

SRC_DIR=~"/Library/Preferences-Old" 
DST_DIR=~"/Library/Preferences" 

請注意,根據分配給兩個*_DIR變量的值,它是不夠的報價被分配的值;你仍然需要引用他們的擴展。

FILEN="test.txt" 

cp "$SRC_DIR/$FILEN" "$DST_DIR" 
5

雙引號會阻止shell將您的~轉換爲實際路徑。注意:

$ echo ~ 
/home/politank_z 

$ echo "~" 
~ 

~不是一個實際的位置,它是你的主目錄的路徑簡寫。

1

正如前面提到的雙引號禁用~擴展。

更好的方法是使用HOME變量:

SRC_DIR="$HOME/Library/Preferences-Old" 
DST_DIR="$HOME/Library/Preferences" 
相關問題