GNU/Linux >> Linux の 問題 >  >> Linux

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

この質問にはすでに回答があります :シェルスクリプトが空白やその他の特殊文字で詰まるのはなぜですか?

(6つの回答)
6年前に閉鎖されました。

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がなぜ コマンドで文字列を分割します。これを防ぐにはどうすればよいですか?

承認された回答:

echoを実行した場合は、DESTINATION変数を展開しています これはあなたが得るものです:

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"

Linux
  1. Bashスクリプトがエイリアスを認識しないのはなぜですか?

  2. Bashスクリプトをデバッグする方法は?

  3. 実行後にBashスクリプトが終了しないのはなぜですか?

  1. BashスクリプトでCdを使用できないのはなぜですか?

  2. なぜBashはスペースで始まるコマンドを保存しないのですか?

  3. Bashスクリプトの変数用のスペース?

  1. bash スクリプトを使用してファイル名のスペースを置き換える方法

  2. Bash スクリプトのパターン マッチング

  3. jenkins パイプラインで bash コマンドを実行する