我知道还有其他替代方法可以实现相同的逻辑,代表下面的代码,但我特别想了解下面的代码。
a和b函数都提供相同的结果。使用\$ in ( eval $1=\$result )
的优势是什么?
#$1 varible to assign result
function x {
local result=12345
eval $1=$result
}
#$1 varible to assign result
function y {
local result=12345
eval $1=\$result
}
x a
echo $a # 12345
x b
echo $b # 12345
答案 0 :(得分:2)
\
表示结果的评估由eval
延迟并完成,而不是在为eval
创建参数时评估结果。
前者(x
)确实:
a=12345
后者(y
)确实:
b=$result
对于大多数用例,没有区别。但是,如果你的字符串中有空格,那么你会发现差异。
例如
function x {
result='1 2 3'
eval $1=$result
}
x a
给出:
bash: 2: command not found
其中
function y {
result='1 2 3'
eval $1=\$result
}
y b
echo $b
给出:
1 2 3