Bash

bash- 用 VAR=${ 定義變數numbern在米b和rnumber:-預設}

  • April 5, 2022

我遇到了一個使用的腳本

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."

引用自:https://unix.stackexchange.com/questions/338146