[英]Expand variables as part of a command in bash
有什么方法可以在命令内部扩展变量? 我很难解释我想要达到的目标,因此我将演示它:
假设我有这个结构:
var1="\${var2} -eq 7"
if [ ${var1} ]; do....
所需的输出是:
if [ ${var2} -eq 7 ]; do....
现在显然这是行不通的,但是我将如何进行类似的工作?
您应该对此类事情使用函数。 您也可以使用eval
,但请不要使用。
$ equalsSeven() (($1 == 7))
$ if equalsSeven 7; then echo Presto; fi
Presto
man bash
/Compound
为此, eval
是邪恶的:
var1="\${var2} -eq 7"
var2=7
if eval [ ${var1} ]; then
echo var2 is 7
fi
注意, if ...; do
if ...; do
无效, if
表达式出现then
,则not do
。
由于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
一样邪恶。请避免对未经检查的输入进行数字求值。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.