在bash中将变量扩展为命令的一部分

时间:2019-05-11 21:03:01

标签: bash variable-expansion

有什么方法可以在命令内部扩展变量? 我很难解释我想要实现的目标,因此我将对其进行演示:

假设我有这个结构:

var1="\${var2} -eq 7"

if [ ${var1} ]; do....

所需的输出是:

if [ ${var2} -eq 7 ]; do....

现在显然那是行不通的,但是我将如何做类似的事情?

3 个答案:

答案 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一样邪恶。请避免对未经检查的输入进行数字求值。)