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

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

我遇到过一个使用的脚本

VAR1=${1:-8}

VAR2=${2:-4}

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

VAR1=${VAR2:-8}

将创造VAR1出任何价值VAR2(如果存在的话)。如果VAR2未设置,则VAR1默认为值 8,并将VAR2保持未设置状态。也就是说,执行此命令后,echo VAR2不会返回任何内容。

那么,我的问题是第一行代码的作用。由于变量名不能以数字开头,VAR1因此显然没有被设置为 1 或任何名为 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."

答案2

它指的是位置参数$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

相关内容