通常情况下,当一个参数传递给一个 shell 脚本时,它的值会被放到 ${1} 中作为第一个参数,${2} 作为第二个参数,以此类推。
如何设置这些参数的默认值,以便如果没有参数传递到脚本中,我们可以使用 ${1} 的默认值呢?
你不能直接对 $1 进行赋值,但你可以像这样分配到一个本地变量中:${parameter:-word}
或在需要使用 $1 的地方使用相同的构造。这意味着如果 _paramater 为空或未设置,就使用 word。
请注意,这仅适用于,请检查您的 shell 是否支持 default values 语法。
set -- "${1:-'default for 1'}" "${2:-'default 2'}" "${3:-'default 3'}"
脚本的其余部分可以直接使用$1
,$2
,$3
而无需进一步检查。
注意:如果您的参数末尾可能有一个不确定的文件列表,则这种方法效果不佳;但是,当您只有零到三个参数时,它能很好地工作。
#!/bin/sh
MY_PARAM=${1:-default}
echo $MY_PARAM
! [[ ${1} ]] && declare $1="DEFAULT"
$1
没有设置,那么在 declare $1="DEFAULT"
中的名称为空,这并没有什么帮助。如果它被设置了(例如,脚本被调用为 ./script abc
),那么您建议的 declare
会使变量 abc
等于 DEFAULT
而不影响 $1
。您无法以这种方式设置“位置参数”($1
、$2
等)。 - Jonathan Leffler
${parameter-word}
,它不会覆盖空字符串。 - l0b0