Bashスクリプトでスペースをエスケープできないのはなぜですか? [コピー]

Bashスクリプトでスペースをエスケープできないのはなぜですか? [コピー]

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"

おすすめ記事