bash命令:eval
一. 简介
正常我们执行命令,会先对命令行进行一次扫描,替换变量,然后执行.
前面加上eval的话,会扫描两次命令行,替换变量,然后执行.
有些场景,eval命令用起来有奇效.
二.正常命令行执行
例如如下命令
TEST_STRING="tessssst"
TMP_TEST_STRING=TEST_STRING
echo ${TMP_TEST_STRING}
# 输出:
TEST_STRING
第三行,一次扫描的时候,把${TMP_TEST_STRING}变量替换成“TEST_STRING”,最终是执行
echo TEST_STRING
三.前面加上eval的命令行执行
前面加上eval的话,会扫描两次命令行,替换变量,然后执行.
例如如下命令
TEST_STRING="tessssst"
TMP_TEST_STRING=TEST_STRING
eval echo \${${TMP_TEST_STRING}}
# 输出:
tessssst
第三行包含eval命令,会对它进行两次扫描.
一次扫描,结果是: eval echo ${TEST_STRING}
二次扫描,结果是: echo "tessssst"
四. eval解决字典使用场景
bash本身是没有字典这个数据结构的.如果你要批量处理一些数据,就比较麻烦.
这时候,可以使用数组+eval来模拟字典来解决问题,示例如下
VALUE_A=(VALUE_A1 VALUE_A2 VALUE_A3)
echo "VALUE_A:${VALUE_A}"
echo ${VALUE_A[0]}
echo ${VALUE_A[1]}
echo ${VALUE_A[2]}
echo ""
VALUE_B=(VALUE_B1 VALUE_B2 VALUE_B3)
echo "VALUE_B:${VALUE_B}"
echo ${VALUE_B[0]}
echo ${VALUE_B[1]}
echo ${VALUE_B[2]}
VALUE_ARRAY=(VALUE_A VALUE_B)
for AVALUE in ${VALUE_ARRAY[@]}
do
echo ""
echo "AVALUE:${AVALUE}"
eval echo \${${AVALUE}[0]}
eval echo \${${AVALUE}[1]}
eval echo \${${AVALUE}[2]}
done
五. 结尾
eval命令在某些场景下十分好使.
参考: