Bash
bash- 用 VAR=${ 定義變數numbern在米b和rnumber:-預設}
我遇到了一個使用的腳本
VAR1=${1:-8}
VAR2=${2:-4}
我可以從其他一些問題中看到並使用一些程式碼
VAR1=${VAR2:-8}
如果存在,將創建
VAR1
任何值。VAR2
如果VAR2
未設置,則VAR1
預設值為 8,VAR2
並將保持未設置。也就是說,在這個命令之後,echo VAR2
不會返回任何東西。那麼,我的問題是第一行程式碼的作用。由於變數名稱不能以數字開頭,
VAR1
顯然沒有設置為 1 或任何名為 1 的變數。這肯定是有原因的,這不僅僅是一點毫無意義的混淆?
${1:-8}
和中使用的變數${2:-4}
是位置參數$1
和$2
。這些保存在命令行上傳遞給腳本(或 shell 函式)的值。如果它們未設置或為空,則您提到的變數替換將使用預設值 8 和 4(分別)代替。這可能用於 shell 腳本或帶(至少)兩個命令行參數的 shell 函式中,如果未提供預設值,您希望為其提供預設值。
腳本或 shell 函式可以接受任意數量的參數,並且可以通過在腳本或函式中使用
$1
、$2
、 … 來引用這些參數。要獲得 9 以上的位置參數值,需要編寫${10}
等${11}
。在這種情況下,另一個有用的變數替換是如果未設置
${parameter:?word}
將顯示word
為錯誤(並退出腳本)parameter
:$ cat script.sh #!/bin/bash var1="${1:?Must provide command line argument}" printf 'I got "%s"\n' "$var1"
$ ./script.sh script.sh: line 3: 1: Must provide command line argument
$ ./script.sh "Hello world." I got "Hello world."