天天看點

php傳參數後面加預設值,Shell參數傳遞與預設值

php傳參數後面加預設值,Shell參數傳遞與預設值

簡介

除了基本的擷取腳本執行時的傳入參數外, 還有更便捷的文法糖:參數預設值,自動指派。

基本傳參

先來一個示例:

#!/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

php傳參數後面加預設值,Shell參數傳遞與預設值

$* 與 $@ 差別

相同點:都是引用所有參數。

不同點:隻有在雙引号中展現出來。

假設在腳本運作時寫了三個參數 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