bash- 使用 VAR=${[number]:-default} 定义变量

bar*_*boy 7 shell bash shell-script variable

我遇到了一个使用的脚本

VAR1=${1:-8}

VAR2=${2:-4}

我可以从其他一些问题中看到并使用一些代码

VAR1=${VAR2:-8}

如果它存在,将创造VAR1任何价值VAR2。如果VAR2未设置,则VAR1默认值为 8,VAR2并将保持未设置。也就是说,在这个命令之后,echo VAR2不会返回任何东西。

那么,我的问题是第一行代码的作用。由于变量名不能以数字开头,VAR1显然没有被设置为 1 或任何名为 1 的变量。这肯定是有原因的,而且这不仅仅是一点毫无意义的混淆?

xhi*_*nne 10

它指的是位置参数$1 ... $n

${1:-default}意思是“如果参数 1 未设置或为空,则使用default”。

注意:不要${1:-2}与混淆${1: -2}。对于 bash,后者被替换为 的最后两个字符$1

例子:

$ set --
$ echo "${1:-2}"
2

$ set 345 678
$ echo "${1:-2}"
345

$ echo "${1: -2}"
45
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 9

${1:-8}${2:-4}中使用的变量是位置参数$1$2。这些保存在命令行上传递给脚本(或 shell 函数)的值。如果未设置,您提到的变量替换将使用默认值 8 和 4(分别)。

脚本或 shell 函数可以接受任意 (?) 数量的参数,这些参数可以通过在脚本/函数中使用$1, $2, ... 来获得。要获得9以上的位置参数的值,需要写${10}${11}等等。

这可能会用于 shell 脚本或带有(至少)两个命令行参数的 shell 函数中,如果未提供默认值,您希望为其提供默认值。

在这种情况下${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"
Run Code Online (Sandbox Code Playgroud)