shell中$*與$@的區別
關於$* 和 $@的 一點 認識 同是菜鳥一起學習
$*
所有的位置參數,被作為一個單詞.
注意:"$*"必須被""引用.
$@
與$*同義,但是每個參數都是一個獨立的""引用字串,這就意味着參數被完整地傳遞,
並沒有被解釋和擴展.這也意味着,每個參數列表中的每個參數都被當成一個獨立的
單詞.
注意:"$@"必須被引用.
$@ $* 只在被雙引號包起來的時候才會有差異
雙引號括起來的情況:
$*將所有的參數認為是一個字段
$@以IFS(默認為空格)來划分字段,如果空格在“”里面,不划分。采用LS的腳本運行./test 1 "2 3" 4 來發現差異
沒有括起來的情況是$@和$*一樣的,見到IFS就划分字段。還是采用LS的腳本運行./test 1 "2 3" 4 來發現差異
一個小例子 ,僅供參考
[Copy to clipboard] [ - ]CODE:#!/bin/bash
echo
index=1
echo "Listing args with\"\$*\":"
for arg in "$*"
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是一個單詞"
echo
index=1
echo "Listing args with \"\$@\":"
for arg in "$@"
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是各個獨立的單詞"
echo
index=1
echo "Listing args with \$* (未被引用):"
for arg in $*
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是各個獨立的單詞"
exit 0
運行后輸出為
[Copy to clipboard] [ - ]CODE:[root@localhost ABS]# ./test 1 2 3 4
Listing args with"$*":
Arg #1=1 2 3 4
所有的參數被認為是一個單詞
Listing args with "$@":
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
所有的參數被認為是各個獨立的單詞
Listing args with $* (未被引用):
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
所有的參數被認為是各個獨立的單詞
shell中$*與$@的區別
關於$* 和 $@的 一點 認識 同是菜鳥一起學習
$*
所有的位置參數,被作為一個單詞.
注意:"$*"必須被""引用.
$@
與$*同義,但是每個參數都是一個獨立的""引用字串,這就意味着參數被完整地傳遞,
並沒有被解釋和擴展.這也意味着,每個參數列表中的每個參數都被當成一個獨立的
單詞.
注意:"$@"必須被引用.
$@ $* 只在被雙引號包起來的時候才會有差異
雙引號括起來的情況:
$*將所有的參數認為是一個字段
$@以IFS(默認為空格)來划分字段,如果空格在“”里面,不划分。采用LS的腳本運行./test 1 "2 3" 4 來發現差異
沒有括起來的情況是$@和$*一樣的,見到IFS就划分字段。還是采用LS的腳本運行./test 1 "2 3" 4 來發現差異
一個小例子 ,僅供參考
[Copy to clipboard] [ - ]CODE:#!/bin/bash
echo
index=1
echo "Listing args with\"\$*\":"
for arg in "$*"
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是一個單詞"
echo
index=1
echo "Listing args with \"\$@\":"
for arg in "$@"
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是各個獨立的單詞"
echo
index=1
echo "Listing args with \$* (未被引用):"
for arg in $*
do
echo "Arg #$index=$arg"
let "index+=1"
done
echo "所有的參數被認為是各個獨立的單詞"
exit 0
運行后輸出為
[Copy to clipboard] [ - ]CODE:[root@localhost ABS]# ./test 1 2 3 4
Listing args with"$*":
Arg #1=1 2 3 4
所有的參數被認為是一個單詞
Listing args with "$@":
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
所有的參數被認為是各個獨立的單詞
Listing args with $* (未被引用):
Arg #1=1
Arg #2=2
Arg #3=3
Arg #4=4
所有的參數被認為是各個獨立的單詞