3

次のスクリプトがあります

file=${file:-letsdump.sh}    
checkfile="~/mysql_backup/$file"
if [ -e "$checkfile" ]; then
mv ~/mysql_backup/$file ~/mysql_backup/$file-bak-$(date +%d%m%Y_%H%M).bak
else
echo 'file doesnt exist'   
fi

ファイルがそこにあることは知っていますが、 ~/ ?

ファイルが見つからない

4

2 に答える 2

11

二重引用符 (実際にはすべての引用符)~は展開を妨げます。代わりに使用してください:

checkfile=~/mysql_backup/"$file"

...または、さらに良いこと$HOMEに、すべてのスクリプトで使用し、~インタラクティブ/人間の使用のみを目的とした機能と見なします。

于 2014-12-01T22:27:18.917 に答える
1

文字は、~二重引用符で囲まれた文字列内では展開されません。

このコンテキストで~は、二重引用符で囲まれた文字列で展開された と同等$HOMEであるため、次のように記述できます。

checkfile="$HOME/mysql_backup/$file"

ユーザー名が続く場合、~そのユーザーのホーム ディレクトリを参照します。これは、どの環境変数によっても追跡されません。"~fred/"展開されませんが、そのコンテキストで正しく展開されるものを書くことはより困難です。引用符の外に置くこともできますが、ホーム ディレクトリ パスにスペースが含まれていると問題が発生する可能性があります。 訂正、Charles Duffy に感謝: 文字列分割は割り当てで無効になっているため、問題にはなりません。

于 2014-12-01T22:30:32.797 に答える