我想做这样的事情,但是要巧妙:
var=${1:?This is an error:+--arg ${1}}
这不是有效的语法,但基本上,如果有人通过$1
作为foo
,我希望var
成为--arg foo
,但如果他们不愿意,我希望错误。
有聪明的方法吗?
答案 0 :(得分:2)
您不需要两个测试,只需对错误测试使用简单的分配即可:
var="--arg ${1:?This is an error}"
如果传递了$1
,则会将其(带有前缀“ --arg
”)分配给变量;如果未通过,则会显示错误并退出(因此不会发生分配)。
顺便说一句,您似乎正在尝试将多个参数(存储到其他程序中)存储在一个普通变量中。这是不安全的,因为$1
可能包含空格和/或通配符,如果您引用的变量没有双引号(someprogram $var
),它将在所有空白和任何通配符上拆分将扩大。另一方面,如果双引号,则--arg
部分将作为同一参数的一部分传递。而是使用数组安全地存储多个值:
arrayvar=("--arg" "${1:?This is an error}")
someprogram "${arrayvar[@]}"
答案 1 :(得分:0)
您不能结合使用多个参数扩展运算符。
分两个步骤进行。首先检查错误,然后进行串联。
: ${1:?This is an error}
var="-arg $1"