2009-05-25 9 views
22

何らかの理由で、引数をスペース文字で受け入れるにはスクリプトが必要です。例えば次のように私は、スクリプトを使用している場合は、シェルスクリプトのスペースを含む引数を渡す

for SOME_VAR in [email protected] 
do 
    echo "$SOME_VAR" 
    cd "$SOME_VAR" 
done; 

私はスクリプトに引数を渡す場合

sh foo.sh "Hello world" 

私はこんにちは、世界をを印刷するためのスクリプトを期待しています(foo.shと呼ばれていると仮定した場合)を入力し、ディレクトリを "Hello world"に変更します。しかし、私が代わりに

hello 
cd: 5: can't cd to hello 
world 
cd: 5: can't cd to world 

ので、私はシェルスクリプト内のコマンドにスペース文字で引数を渡すんどのように正確に、このエラーメッセージが表示されます!

答えて

40

あなたも、引用符で[email protected]をラップする必要があります:"[email protected]"

これは、引数にスペースを無視するようにシェルに指示します。すべての引数を非常に長い文字列に変換するわけではありません。

+0

返信ありがとうございました。私はこの自分自身、いくつかのさらなる説明http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST – Jeffrey04

+0

にお答えしたいのですが、$ @ その場合は、forループを使用しても、通常の 'echo" $ @ "; cd" $ @を使用することは実際にはありません。 スペースブールで区切りを区切って '〜のために'を持つことができる解決法はありますか? –

+4

@AndreasWederbrand:いいえ "$ @"は、それぞれの個人をラップすることを意味する特別なトークンです"bc"は '' abc ''や' 'a" "b" "c" 'の代わりに' 'a" "bc" 'になります。 –

関連する問題