Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
惯用bash:为变量设置默认值_Bash_Idioms - Fatal编程技术网

惯用bash:为变量设置默认值

惯用bash:为变量设置默认值,bash,idioms,Bash,Idioms,如何以简洁、惯用的方式为bash变量设置默认值?这看起来很难看: if [[ ! -z "$1" ]]; then option="$1" else option="default" fi 您可以使用: option=${1:-default} 如果给定了第一个命令行参数且不为null,则此选项将设置第一个命令行参数的选项。否则,它会将选项设置为默认值。有关参数扩展和此表单的一些有用变体的详细信息,请参阅。您可以使用: option=${1:-default} 如果给定了第

如何以简洁、惯用的方式为bash变量设置默认值?这看起来很难看:

if [[ ! -z "$1" ]]; then
    option="$1"
else
    option="default"
fi
您可以使用:

option=${1:-default}
如果给定了第一个命令行参数且不为null,则此选项将设置第一个命令行参数的选项。否则,它会将选项设置为默认值。有关参数扩展和此表单的一些有用变体的详细信息,请参阅。

您可以使用:

option=${1:-default}

如果给定了第一个命令行参数且不为null,则此选项将设置第一个命令行参数的选项。否则,它会将选项设置为默认值。有关参数扩展和此表单的一些有用变体的详细信息,请参阅。

对于除指定默认值(Toxaris已经介绍过)以外的其他用途,值得一提的是,对
-z
有一个反向测试,因此

if [[ ! -z "$1" ]]; then
    do_something
fi
你可以简单地写:

if [ -n "$1" ]; then
    do_something
fi
如果没有
else
分支,可以将其缩短为:

[ -n "$1" ] && do_something

对于除指定默认值(Toxaris已经介绍过)以外的其他用途,值得一提的是,对
-z
有一个反向测试,因此

if [[ ! -z "$1" ]]; then
    do_something
fi
你可以简单地写:

if [ -n "$1" ]; then
    do_something
fi
如果没有
else
分支,可以将其缩短为:

[ -n "$1" ] && do_something

请注意,如果您使用显式的空第一个参数调用脚本,则其行为可能与问题中的代码不同。“不,不会,因为您使用了冒号。”。如果您编写
${1-default}
,则它将区分未设置参数和设置但为空的参数。@RomanCheplyaka,谢谢,在手册中确认了这一点并编辑了答案。“请注意,如果您使用显式空的第一个参数调用脚本,则其行为可能与问题中的代码不同。”不,不会,因为你用了冒号。如果您编写
${1-default}
,则它将区分未设置和设置但为空的参数。@RomanCheplyaka,谢谢,在手册中确认了这一点并编辑了答案。+1表示完整的答案(尽管可能有点太简洁[缺少示例])。+1表示完整的答案(尽管可能有点太简洁[缺少示例])回答。或者如果[“$1”],只需
;然后…
[-n“$1”]&&do_some
有一个缺点-如果设置了
set-e
。@anishsane就
set-e
而言,
[…]和&command
if[…]相同;然后指挥;fi
[…]
命令可以安全地失败,如果它运行失败,
命令将退出shell。哦。。。我的错误。我不知道。。谢谢。或者干脆
如果[“$1”];然后…
[-n“$1”]&&do_some
有一个缺点-如果设置了
set-e
。@anishsane就
set-e
而言,
[…]和&command
if[…]相同;然后指挥;fi
[…]
命令可以安全地失败,如果它运行失败,
命令将退出shell。哦。。。我的错误。我不知道。。谢谢