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
选项,您会收到该错误消息。ksh
ksh -u
ksh -o nounset
set -u
set -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
通配符,但我们依赖于变量不加引号的第三个副作用:空去除。 (我们还禁用nounset
了set +u
,所有这些仅在子 shell 中)。
答案2
我怀疑你是否可以只做一行,你可以尝试这样的事情
validate_touch()
{
for value in "$@"
do
if [ ! -z "$value" ]; then touch $value;fi
done
}
validate_touch new