如何使变量发生

时间:2017-11-10 13:48:17

标签: bash variables sh zsh

我在shell脚本中有这段代码

id='this'
sql="hello $id"
echo "$sql"
id="salut"
echo "$sql"

它会回显

  

你好,

     

你好,

我怎样才能获得

  

你好,

     

你好salut

换句话说,如何在其他变量中更改变量id?

2 个答案:

答案 0 :(得分:1)

您可以使用 eval ,但这可能存在风险(取决于变量中的内容)。

id='this'
sql="hello \$id"
eval "echo $sql"
id='salut'
eval "echo $sql"

一种安全的好方法是使用函数重置 sql 变量。

prepare_sql() {
    sql="hello $id"
}

id='this'
prepare_sql
echo $sql
id='salut'
prepare_sql
echo $sql

您甚至可以将作业放入函数中。

change_id() {
    id=$1
    sql="hello $id"
}

change_id this
echo $sql
change_id salut
echo $sql

答案 1 :(得分:0)

变量的值在您引用它们时设置。所以对于你想要的,你必须这样做:

id='this'
sql="hello $id"     # here, $id == this, so sql == "hello this"
echo "$sql"
id="salut"
sql="hello $id"     # here, $id == salut, so sql == "hello salut"
echo "$sql"

更改变量时不会重新评估变量,除非您明确要求变量。