![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iZ4Y2M4MTMidzMkBzNlVDZ5MGMzM2YzETOhZWM0ITM38CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
簡介
除了基本的擷取腳本執行時的傳入參數外, 還有更便捷的文法糖:參數預設值,自動指派。
基本傳參
先來一個示例:
#!/bin/sh
echo 參數0: $0;
echo 參數1: $1;
echo 參數2: $2;
echo 參數3: $3;
echo 參數4: $4;
執行測試腳本
[[email protected] tmp]# sh testParam.sh a b c d
所有參數: a b c d
參數0: testParam.sh
參數1: a
參數2: b
參數3: c
參數4: d
$* 與 $@ 差別
相同點:都是引用所有參數。
不同點:隻有在雙引号中展現出來。
假設在腳本運作時寫了三個參數 1、2、3,,則 " * " 等價于 "1 2 3"(傳遞了一個參數),而 "@" 等價于 "1" "2" "3"(傳遞了三個參數)。
#!/bin/bash
# author:PHP程式設計
# url:www.PHPXS.com
echo "-- $* 示範 ---"
for i in "$*"; do
echo $i
done
echo "-- $@ 示範 ---"
for i in "$@"; do
echo $i
done
執行腳本,輸出結果如下所示:
$ chmod +x test.sh
$ ./test.sh 1 2 3
-- $* 示範 ---
1 2 3
-- $@ 示範 ---
1
2
3
預設參數(變量預設值)
if繁瑣方式
if [ ! $1 ]; then
$1='default'
fi
- 變量為null
取預設值
變量 為 null
${vari-defaultValue}
實踐
[[email protected] /]# unset name
[[email protected] /]# echo ${name}
[[email protected] /]# echo ${name-yjx}
yjx
[[email protected] /]# name=
[[email protected] /]# echo ${name-yjx}
[[email protected] /]# echo ${name}
[[email protected] /]#
= 變量為null時, 同時改變變量值
[[email protected] /]# unset name
[[email protected] /]# echo ${name=yjx}
yjx
[[email protected] /]# echo $name
yjx
[[email protected] /]# name=""
[[email protected] /]# echo ${name=yjx}
[[email protected] /]#
:- 變量為null 或 空字元串
取預設值
變量為null
變量為空字元串
${vari:-defaultValue}
:= 變量為null 或 空字元串, 同時改變變量值
{$vari:=defaultValue}
測試 null
[[email protected] /]# unset name
[[email protected] /]# echo ${name:=yjx}
yjx
[[email protected] /]# echo ${name}
yjx
[[email protected] /]#
測試 空字元串
[[email protected] /]# name=""
[[email protected] /]# echo ${name:=yjx}
yjx
[[email protected] /]# echo $name
yjx
:? 變量為null 或 空字元串時報錯并退出
[[email protected] /]# unset name
[[email protected] /]# echo ${name:?yjx}
-bash: name: yjx
[[email protected] /]# name=""
[[email protected] /]# echo ${name:?yjx}
-bash: name: yjx
[[email protected] /]# name="guest"
[[email protected] /]# echo ${name:?yjx}
guest
:+ 變量不為空時使用預設值
與 :- 相反
[[email protected] /]# name="guest"
[[email protected] /]# echo ${name:+yjx}
yjx
[[email protected] /]# echo $name
guest