shell中的$* $@


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
所有的參數被認為是各個獨立的單詞


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM