$@ 和 $* 只在被雙引號包起來的時候才會有差異
雙引號括起來的情況:
$*將所有的引數認為是乙個字段
$@以 預設為空格來劃分字段,如果空格在「」裡面,不劃分。
沒有括起來的情況是$@和$*一樣的,見到 空格 就劃分字段。
$#是 程式的 引數個數(不包括$0)
$?獲取上一次命令執行的返回值,一般 執行 成功 返回0。
$0 $1 $2以此類推,取命令列引數,如 test.sh a b c ,則 $0 是 test,$1是 a, $2是b,$3是c。
乙個小例子 ,僅供參考
test.sh內容如下:
#!/bin/bash
index=1
echo "listing args with\"\$*\":"
for arg in "$*"
doecho "arg #$index=$arg"
let "index+=1"
done
echo "all parameter is one word"
echo
index=1
echo "listing args with \"\$@\":"
for arg in "$@"
doecho "arg #$index=$arg"
let "index+=1"
done
echo "all parameter is all kinds of different words"
echo
index=1
echo "listing args with \$* "
for arg in $*
doecho "arg #$index=$arg"
let "index+=1"
done
echo "all parameter is all kinds of different words"
echo
index=1
echo "listing args with \$r@ "
for arg in $@
doecho "arg #$index=$arg"
let "index+=1"
done
echo
echo "all parameter is all kinds of different words"
執行結果如下
$ ./test.sh 1 2 3 "4 5"
listing args with"$*":
arg #1=1 2 3 4 5
all parameter is one word
listing args with "$@":
arg #1=1
arg #2=2
arg #3=3
arg #4=4 5
all parameter is all kinds of different words
listing args with $*
arg #1=1
arg #2=2
arg #3=3
arg #4=4
arg #5=5
all parameter is all kinds of different words
listing args with $r@
arg #1=1
arg #2=2
arg #3=3
arg #4=4
arg #5=5
all parameter is all kinds of different words
the number of all parameter is 4
shell 中的 的區別
等同於 用於將呼叫函式賦值的時候 比如 result date result date 這兩者的效果是相同的 用於呼叫變數,防止一些轉義之類的錯誤,在呼叫陣列的時候需要加 比如 echo this is 用於計算數值,比如 sum sum 1 用於判斷 if result gt1 then acti...
shell中 與 的區別
命令替換 在bash中,與 反引號 都是用來作命令替換的。命令替換與變數替換差不多,都是用來重組命令列的,先完成引號裡的命令列,然後將其結果替換出來,再重組成新的命令列。exp 1 echo today is date y m d today is 2014 07 01 與 在操作上,這兩者都是達到...
shell 中 與 的區別
在shell中 為建立 echo hello shell out.txt 為追加 echo hello shell out.txt 當out.txt 文字不存在時,與 都會預設建立out.txt文字,並將hello shell 字串儲存到out.txt中 當out.txt文字存在時,會將out.tx...