Bashでパスの空白文字をエスケープしようとしましたが、どちらも機能しませんでした。バックスラッシュまたは引用符働く
.shスクリプト:
ROOT="/home/hogar/Documents/files/"
FILE=${ROOT}"bdd.encrypted"
DESTINATION="/home/hogar/Ubuntu\ One/folder"
mv ${FILE} ${DESTINATION}
スクリプト(./file
)を実行した後の結果は次のとおりです。
mv: target 'One/folder' is not a directory
mv
コマンドが文字列を分割するのはなぜですか。これが起こらないようにするにはどうすればよいですか?
ベストアンサー1
DESTINATION変数を拡張すると、echo
次のような結果が得られます。
echo ${DESTINATION}
/home/hogar/Ubuntu\ One/folder
しかし、mv
これを理解しないでください。
mv ${FILE} ${DESTINATION}
mv: cannot move '/home/hogar/Documents/files/bdd.encrypted' to '/home/hogar/Ubuntu\\ One/folder': No such file or directory
(何かMVが長くなりましたね)
これを防ぐには、引用符を使用する必要があります。
mv "${FILE}" "${DESTINATION}"
拡張が必要ない場合(以前はすでに拡張を行っていたため)、"$..."
次の方法で十分です。
mv "$FILE" "$DESTINATION"