2015年12月6日 星期日

[Linux 文章收集] 變數值代換 (variables substitution) 精簡筆記

Source From Here 
Introduction 
變數值代換相較於指令代換,是一般使用者比較少碰到的;不過當你要成為一位合格的bash/csh programmer,變數值代換可是要跟吃飯喝水一樣自然。 

Case 1. ${variable-'defaultValue'} 
意義:當 variable 不存在時,將variable暫時指定成 defaultValue。所謂「暫時」,是指此行之後,在整個 script 裡 variable 都還是不存在此變數名稱。範例代碼如下: 
- t1.sh 
  1. #!/bin/sh  
  2. unset myname  
  3. echo "myname = '${myname-default value}'"  
  4. echo "myname = '${myname}'"  
執行結果: 
# ./t1.sh
myname = 'default value'
myname = ''

可以發現,第一行的 'default value' 是利用變數值替換得來的,但是事實上我們並沒有真的設定 myname,因此第二行的 echo 的結果為空。 

Case 2. ${variable:-'defaultValue'} 
意義:當 variable 不存在或為空值時,將 variable 暫時指定成 defaultValue。所謂「暫時」,是指此行之後,在整個 script 裡 variable 都還是不存在或變數值不改變。 
- t2.sh 
  1. #!/bin/sh  
  2. myname=  
  3. echo "myname = '${myname:-default value}'"  
  4. echo "myname = '${myname}'"  
執行結果: 
# ./t2.sh
myname = 'default value'
myname = ''


Case 3. ${variable:='defaultValue'} 
意義:表示 variable 若不存在或為空值,則指定 defaultValue 給 variablevariable 將在整個 script 裡都為 defalutValue。這是最為常見的變數值替換。 
- t3.sh 
  1. #!/bin/sh  
  2. myname=  
  3. echo "myname = '${myname:=default value}'"  
  4. echo "myname = '${myname}'"  
執行結果: 
# ./t3.sh
myname = 'default value'
myname = 'default value'

可以發現,由於 myname 是空值,因此利用":="將 myname 的值永久設定成 'default value' (所謂永久,指的是在此script的生命週期裡)。因此兩個輸出都會是 'default value'。事實上,在我們的終端機裡控制命令列最前面的 使用者名稱@主機名稱:工作路徑 的這個表示法,就是在 ~/.bashrc 裡利用此變數替換方法來達成的. 

Case 4. ${variable:?'defaultValue'} 
意義:若 variable 不存在或為空值,則會出現在 std err 上,以檢查變數值是否被正確設定。此變數值替代表示法常用在 debug,而不會真正用在可執行的 script 上,遇到錯誤就會直接停止,無法利用 std err 導向輸出。 
- t4.sh 
  1. #!/bin/sh  
  2. myname=  
  3. echo "myname = '${myname:?default value}'"  
  4. echo "myname = '${myname}'"  
執行結果: 
# ./t4.sh
./t4.sh: line 3: myname: default value

因為 myname 被預期設定值為 'default value',但是卻是空值,因此會觸發一個標準錯誤輸出,script 嘎然而止。 

Case 5. ${variable:+'defaultValue'} 
意義:表示 variable 若已被設定,則本行的 variable 暫時被設定為 defalutValue,但整個 script 裡的 variable 未被改變。 
- t5.sh 
  1. #!/bin/sh  
  2. myname=John  
  3. echo "myname = '${myname:+default value}'"  
  4. echo "myname = '${myname}'"  
執行結果: 
# ./t5.sh
myname = 'default value'
myname = 'John'

可以發現:myname 非空值,因此將會被暫時設定成 'default value';但是 myname 的值不會因此改變,仍然是 John。

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...