Linux中變量$#,$@,$0,$1,$2,$*,$$,$?的含義


$# 是傳給腳本的參數個數
$0 是腳本本身的名字
$1 是傳遞給該shell腳本的第一個參數
$2 是傳遞給該shell腳本的第二個參數
$@ 是傳給腳本的所有參數的列表
$* 是以一個單字符串顯示所有向腳本傳遞的參數,與位置變量不同,參數可超過9個
$$ 是腳本運行的當前進程ID號
$? 是顯示最后命令的退出狀態,0表示沒有錯誤,其他表示有錯誤

區別:$@ $*

  • 相同點:都是引用所有參數
  • 不同點:只有在雙引號中體現出來。假設在腳本運行時寫了三個參數(分別存儲在$1 $2 $3)則"$*" 等價於 “$1 $2 $3"(傳遞了一個參數);而“$@" 等價於 "$1" "$2" "$3"(傳遞了三個參數)

例子一

##dels.sh
echo
"number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@" echo "show parm list:$*" echo "show process id:$$" echo "show precomm stat: $?"

執行結果

[@jihite]$ sh del.sh 1 2 3
number:3
scname:del.sh
first: 1
second:2
argume:1 2 3
show parm list:1 2 3
show process id:21057
show precomm stat: 0

例子二

#!/bin/sh
num=$#
name=$0
echo "number:$num"
echo "scname:$name"
echo $0
echo $1
echo $2

for ((i=0; i<$num; i++))
do
    echo "$i"
done

echo "argume:$@"
for key in $@
do
    echo $key
done
echo "-----------------"
for key in "$@"
do
    echo $key
done
echo "-----------------------------"
for key2 in $*
do 
    echo $key2
done
echo "-----------------"
for key2 in "$*"
do 
    echo $key2
done

echo "show process id:$$"
cho
echo "show precomm stat: $?"

執行結果

[@jihite]$ sh del.sh a b                                                       
number:2
scname:del.sh
del.sh
a
b
0
1
argume:a b
a
b
-----------------
a
b
-----------------------------
a
b
-----------------
a b
show process id:23582
del.sh: line 37: cho: command not found
show precomm stat: 127

問題:

echo #0 #1 能不能用 $i 表示呢?


免責聲明!

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



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