脚本编写 - 未定义时忽略变量

脚本编写 - 未定义时忽略变量

HP-UX *** B.11.31 U ia64 **** 无限用户许可证 您好,

var1=abc
var2=xyz
touch $var1 $var2 $var3

如果未设置变量之一,则命令失败并显示

ksh: var3: parameter not set

我们如何使命令忽略未设置/定义的变量并为已定义的变量创建文件。没有 if 循环。就在触摸命令内。谢谢

答案1

如果您通过调用as或或 通过运行or来打开该-u选项,您会收到该错误消息。kshksh -uksh -o nounsetset -uset -o nounset

触摸 $var1 $var2 $var3

无论如何都是错误的,除非这些变量旨在包含文件模式列表。

本来应该是:

touch -- "$var1" "$var2" "$var3"

现在,如果您想允许其中一个为空,并且touch在这种情况下不将其作为空参数传递(并解决问题set -u),您可以编写:

touch -- ${var1:+"$var1"} ${var2:+"$var2"} ${var3:+"$var3"}

另一种选择是执行以下操作:

(IFS=; set -f +u; touch -- $var1 $var2 $var3)

使用IFS=,我们禁用分词,使用set -f通配符,但我们依赖于变量不加引号的第三个副作用:空去除。 (我们还禁用nounsetset +u,所有这些仅在子 shell 中)。

答案2

我怀疑你是否可以只做一行,你可以尝试这样的事情

validate_touch()
{
for value in "$@"
do
if [ ! -z "$value" ]; then touch $value;fi
done
}
validate_touch new

相关内容