Unix shell脚本参数的默认值是什么?

18

通常情况下,当一个参数传递给一个 shell 脚本时,它的值会被放到 ${1} 中作为第一个参数,${2} 作为第二个参数,以此类推。

如何设置这些参数的默认值,以便如果没有参数传递到脚本中,我们可以使用 ${1} 的默认值呢?

4个回答

15

你不能直接对 $1 进行赋值,但你可以像这样分配到一个本地变量中:${parameter:-word} 或在需要使用 $1 的地方使用相同的构造。这意味着如果 _paramater 为空或未设置,就使用 word

请注意,这仅适用于,请检查您的 shell 是否支持 default values 语法。


2
它也适用于Bourne、Korn和POSIX shell,因此它被广泛使用。它不适用于C Shell衍生版本,但是海贝壳最好留在海岸边。 - Jonathan Leffler
2
如果空字符串可以是有效的输入,则必须使用${parameter-word},它不会覆盖空字符串。 - l0b0

11
你可以考虑:
set -- "${1:-'default for 1'}" "${2:-'default 2'}" "${3:-'default 3'}"

脚本的其余部分可以直接使用$1$2$3而无需进一步检查。

注意:如果您的参数末尾可能有一个不确定的文件列表,则这种方法效果不佳;但是,当您只有零到三个参数时,它能很好地工作。


10
#!/bin/sh
MY_PARAM=${1:-default}

echo $MY_PARAM

-1
也许我没有很好地理解你的问题,但我倾向于用一种不太复杂的方式来解决这个问题:
                     ! [[ ${1} ]]   &&   declare $1="DEFAULT"

希望这有所帮助。

如果 $1 没有设置,那么在 declare $1="DEFAULT" 中的名称为空,这并没有什么帮助。如果它被设置了(例如,脚本被调用为 ./script abc),那么您建议的 declare 会使变量 abc 等于 DEFAULT 而不影响 $1。您无法以这种方式设置“位置参数”($1$2 等)。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接