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

bashスクリプトにスペースを含むベース名?

問題は $1

MYBASENAME="`basename $1`" 

は引用されていません。代わりにこれを使用してください:

MYBASENAME="$(basename "$1")"

1 組の引用符がありません!

MYBASENAME="`basename \"$1\"`"

これで問題は解決します。


割り当てが単一のコマンド置換である場合、コマンド置換を引用符で囲む必要はありません。シェルは、変数の割り当てに対して単語分割を実行しません。

MYBASENAME=$(basename "$1")

それだけです。 $() を使う習慣を身につけてください。 $() のため、バッククォートの代わりに より簡単にネストできます (これは POSIX であり、最新のすべてのシェルがサポートしています)。

PS:しないようにしてください。 bash を書く スクリプト。 シェル を書いてみてください スクリプト。違いは、バシズムやズシズムなどがないことです。C の場合と同様に、移植性はスクリプトの望ましい機能であり、特に簡単に実現できる場合はそうです。あなたのスクリプトはバシズムを使用していないので、 #!/bin/sh と書きます 代わりは。ニットピッカー向け:はい、知っています。古い SunOS と Solaris /bin/sh $() がわかりません しかし /usr/xpg4/bin/sh POSIX シェルです。


Linux
  1. ファイル名にスペースが含まれるスクリプトで問題が発生しましたか?

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

  3. BashスクリプトのRmコマンドは変数では機能しませんか?

  1. どのシェルインタープリターがシバンなしでスクリプトを実行しますか?

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

  3. BASH を介してスペースをアンダースコアに置き換えます

  1. `set -e`を使用したBashスクリプトは`…&&…`コマンドで停止しませんか?

  2. スペースを含むファイル名をシェルスクリプトに渡しますか?

  3. Ctrl + cでBashスクリプトを停止できませんか?