有人可以转换这个代码吗?我从网上得到这个。
最初,命令中有一个参数是加号 (+) 或减号 (-)。但由于我现在只需要添加(它不再在参数中),我希望它自动进行添加。
-|+) eval '(('jd2=${jd1}${5}${6}'))'
jd2date $jd2
答案1
代码是这样的吗?
case "$5" in
-|+) eval '(('jd2=${jd1}${5}${6}'))' jd2date $jd2
esac
如果是这样,您可以像这样调用命令:
script arg1 arg2 arg3 arg4 + 6
或者
script arg1 arg2 arg3 arg4 - 10
您也许可以使代码看起来像这样:
eval '(('jd2=${jd1}+${5}'))' jd2date $jd2
该命令的调用方式如下:
script arg1 arg2 arg3 arg4 10
${5}
、${6}
、${jd1}
、 和$jd2
被替换为其各自变量的内容。数字变量(例如$5
和$6
)是位置参数。
由于您不再需要将运算符放置在变量中,因此
eval
不需要调用。您的代码可能如下所示:
(( jd2=${jd1}+${5} ))
jd2date $jd2
或者,使用稍微简洁的语法:
(( jd2 = jd1 + $5 ))
jd2date $jd2
答案2
我不确定您想通过代码片段实现什么目的,但这里有一个使用 eval 的示例以及与类似命令替换运算符的比较:
$ echo `echo 2 + 2 | bc`
4
$ echo $(echo 2 + 2 | bc)
4
$ eval "echo 2 + 2 | bc"
4
$ echo "date"
date
$ eval "date"
Thu Oct 10 21:20:01 EDT 2013
因此 eval “评估”一个命令或一系列命令,并返回运行该命令的结果。对于我的一生,eval
除了直接运行命令或使用反引号或$(...)
语法可以完成的操作外,我无法弄清楚任何用途。