分配值时使用\ $

时间:2018-05-07 12:00:16

标签: bash

我知道还有其他替代方法可以实现相同的逻辑,代表下面的代码,但我特别想了解下面的代码。

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

1 个答案:

答案 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