有什么方法可以在命令内部扩展变量? 我很难解释我想要实现的目标,因此我将对其进行演示:
假设我有这个结构:
var1="\${var2} -eq 7"
if [ ${var1} ]; do....
所需的输出是:
if [ ${var2} -eq 7 ]; do....
现在显然那是行不通的,但是我将如何做类似的事情?
答案 0 :(得分:0)
您应该对此类事情使用函数。您也可以使用eval
,但请不要使用。
$ equalsSeven() (($1 == 7))
$ if equalsSeven 7; then echo Presto; fi
Presto
man bash
,/Compound
答案 1 :(得分:0)
为此,var favicon = $("link[rel='shortcut icon']").attr("href") ||
$("link[rel='icon']").attr("href") || "";
是邪恶的:
eval
请注意,var1="\${var2} -eq 7"
var2=7
if eval [ ${var1} ]; then
echo var2 is 7
fi
表达式在if ...; do
而不是if
出现之后then
是无效的。
答案 2 :(得分:0)
由于bash的数值评估实际上可以扩展变量(而且,不需要附加$
来表示变量),因此可以在bash中轻松实现这一点:
$ comparison='x==7'
$ x=7
$ if ((comparison)); then echo yup; else echo nope; fi
yup
$ x=8
$ if ((comparison)); then echo yup; else echo nope; fi
nope
之所以可行,是因为((…))
和$((…))
是数字上下文。数组的索引以及声明为数值的变量的分配也是如此。 (但是,此功能几乎与eval
一样邪恶。请避免对未经检查的输入进行数字求值。)