2,035 瀏覽數

Bash Shell Script – 變數 測試 , 替換

測試環境為 Ubuntu 16.04 x64

用來判斷變數是否存在,不存在則由後面字串來取代.

變數 Name 已經設定過為 Ben,所以不會被取代.

root@ubuntu:~# Name="Ben"
root@ubuntu:~# echo ${Name-NoName}
Ben

變數 Name 已經設定過為空字串,所以不會被取代.

root@ubuntu:~# Name=""
root@ubuntu:~# echo ${Name-NoName}

變數 Names 沒有設定過,所以會被取代.

root@ubuntu:~# echo ${Names-NoName}
NoName

:-

用來判斷變數是否存在,不存在則由後面字串來取代.同 “-” 不同點在於空字串視為不存在.

root@ubuntu:~# Name=""
root@ubuntu:~# echo ${Name-NoName}

root@ubuntu:~# echo ${Name:-NoName}
NoName

+

用來判斷變數是否存在,存在則由後面字串來取代.

變數 Name 已經設定過為 Ben,所以會被取代.

[root@localhost ~]$ Name="Ben"
[root@localhost ~]$ echo ${Name+NoName}
NoName

變數 Name 已經設定過為空字串,所以會被取代.

[root@localhost ~]$ Name=""
[root@localhost ~]$ echo ${Name+NoName}
NoName

變數 Names 沒有設定過,所以不會被取代.

[root@localhost ~]$ echo ${Names+NoName}

:+

用來判斷變數是否存在,存在則由後面字串來取代.同 “+” 不同點在於空字串視為不存在.

[root@localhost ~]$ Name=""
[root@localhost ~]$ echo ${Name+NoName}
NoName
[root@localhost ~]$ echo ${Name:+NoName}

=

類似 – (用來判斷變數是否存在,不存在則由後面字串來取代.),但如果變數沒有設定時,變數會被設定成後面的字串.

變數 Name 已經設定過,所以 Firstname 等於 Ben.

[root@localhost ~]$ Name="Ben"
[root@localhost ~]$ Firstname=${Name=NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname=Ben , Name=Ben

變數 Name 已經設定過為空字串,所以 Firstname 等於 Ben(空字串).

[root@localhost ~]$ Name=""
[root@localhost ~]$ Firstname=${Name=NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname= , Name=

變數 Name 沒有設定過,所以 Firstname 與 name 都會被設定成為 NoName .

[root@localhost ~]$ unset Name
[root@localhost ~]$ Firstname=${Name=NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname=NoName , Name=NoName

:=

同 = ,但空字串視為不存在.

[root@localhost ~]$ Name=""
[root@localhost ~]$ Firstname=${Name=NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname= , Name=
[root@localhost ~]$ Name=""
[root@localhost ~]$ Firstname=${Name:=NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname=NoName , Name=NoName

?

類似 – (用來判斷變數是否存在,不存在則由後面字串來取代.),但如果變數沒有設定時,會直接輸出為 stderr.

變數有設定,所以 Firstname = Ben

[root@localhost ~]$ Name="Ben"
[root@localhost ~]$ Firstname=${Name?NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname=Ben , Name=Ben

空字串也算

[root@localhost ~]$ Name=""
[root@localhost ~]$ Firstname=${Name?NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname= , Name=

沒有設定變數,所以直接輸出為 stderr

[root@localhost ~]$ unset Name
[root@localhost ~]$ Firstname=${Name?NoName}
-bash: Name: NoName

:?

同 ? ,但空字串視為不存在.

[root@localhost ~]$ Name=""
[root@localhost ~]$ Firstname=${Name:?NoName}
-bash: Name: NoName
[root@localhost ~]$ Firstname=${Name?NoName}
[root@localhost ~]$ echo Firstname=${Firstname} , Name=${Name}
Firstname= , Name=

One Reply to “Bash Shell Script – 變數 測試 , 替換”

  1. 自動參照通知: Bash Shell Script – $() , ${} , $(()) – Benjr.tw

發表迴響