2016-05-10 7 views
6

[email protected]"[email protected]"の間に違いはありますか?

特殊文字以外の違いがあるかもしれませんが、入力引数を持つ@記号はどうですか?

+1

質問は厳密に重複していませんが、そこの回答もこの質問に答えます。 –

答えて

9

はい!

$ cat a.sh 
echo "[email protected]" 
echo [email protected] 

のは、それを実行してみましょう:あなたが見ることができるように

$ ./a.sh 2 "3  4" 5 
2 3  4 5     # output for "[email protected]" 
2 3 4 5      # output for [email protected] -> spaces are lost! 

は、[email protected]使用すると、パラメータとして使用する場合、いくつかのコンテンツを「失う」するためのパラメータになります。これの詳細な説明については、例えば、I just assigned a variable, but echo $variable shows something elseを参照してください。 GNU Bash manual --> 3.4.2 Special Parametersから


@

($ @を)1から始めて、位置パラメータに展開されます。 拡張が二重引用符で囲まれた場合、各パラメータは という別の単語に展開されます。つまり、 "$ @"は "$ 1" "$ 2" ...に相当します。 二重引用拡張が単語内で発生する場合、 最初のパラメータの拡張子は元の 語の先頭部分と結合され、最後のパラメータの展開は元の単語の最後の 部分と結合されます。位置パラメータがない場合、 "$ @"と$ @は何も展開しません(つまり、それらは削除されます)。

5

$ @をコマンドに渡すと、すべての引数がコマンドに渡されます。引数に空白が含まれている場合、コマンドはその引数を2つの別個のものとして見ます。

コマンドに "$ @"を渡すと、すべての引数が引用された文字列としてコマンドに渡されます。このコマンドは、空白を含む引数を、空白を含む単一の引数として見ます。

は簡単に一度にループ内のすべての引数を表示する関数、1を書き違いを視覚化するには、次の出力を生成します

<script> "foo bar" 

でそのスクリプトを呼び出す

#!/bin/bash 

loop_print() { 
    while [[ $# -gt 0 ]]; do 
     echo "argument: '$1'" 
     shift 
    done 
} 

echo "#### testing with \[email protected] ####" 
loop_print [email protected] 
echo "#### testing with \"\[email protected]\" ####" 
loop_print "[email protected]" 

#### testing with [email protected] #### 
argument: 'foo' 
argument: 'bar' 
#### testing with "[email protected]" #### 
argument: 'foo bar' 
関連する問題