2016-05-10 90 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

將$ @傳遞給命令將所有參數傳遞給該命令。如果一個參數包含一個空格,那麼該命令會將該參數看作兩個單獨的參數。

將「$ @」傳遞給命令會將所有參數作爲帶引號的字符串傳遞給該命令。該命令會將包含空白的參數看作包含空白的單個參數。

輕鬆虛擬化的差異在同一時間寫,打印在一個循環中的所有參數的函數,一個:

#!/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]" 

調用帶有

<script> "foo bar" 

該腳本會產生輸出

#### testing with [email protected] #### 
argument: 'foo' 
argument: 'bar' 
#### testing with "[email protected]" #### 
argument: 'foo bar' 
相關問題