簡體   English   中英

shell 腳本中的 $@ 和 $* 有什么區別?

[英]What is the difference between $@ and $* in shell scripts?

在 shell 腳本中, $@$*之間有什么區別?

哪一種是獲取腳本參數的首選方法?

不同的 shell 解釋器之間是否存在差異?

這里

$@ 的行為與 $* 類似,只是在引用時,如果其中有空格,參數會被正確分解。

以這個腳本為例(取自鏈接的答案):

for var in "$@"
do
    echo "$var"
done

給出了這個:

$ sh test.sh 1 2 '3 4'
1
2
3 4

現在將"$@"更改為$*

for var in $*
do
    echo "$var"
done

你會得到這個:

$ sh test.sh 1 2 '3 4'
1
2
3
4

(使用Google找到的答案)

與我的 POV 的一個主要區別是“$@”保留了原始參數數量。 這是唯一的形式。 出於這個原因,使用腳本傳遞參數非常方便。

例如,如果文件 my_script 包含:

#!/bin/bash

main()
{
   echo 'MAIN sees ' $# ' args'
}

main $*
main $@

main "$*"
main "$@"

### end ###

我像這樣運行它:

my_script 'a b c' d e

我會得到這個輸出:

MAIN 看到 5 個參數

MAIN 看到 5 個參數

MAIN 看到 1 個參數

MAIN 看到 3 個參數

$@ 每個參數都是一個帶引號的字符串。 否則它的行為相同。

請參閱: http : //tldp.org/LDP/abs/html/internalvariables.html#APPREF

有什么區別

[英]What is the difference between <EOF and <'EOF' in shell heredocs?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM