【问题标题】:Bash indirect variable reference [duplicate]Bash间接变量引用[重复]
【发布时间】:2015-09-05 22:11:41
【问题描述】:

EDIT2:@glenn jackman 我认为这会解决它,但它仍然在我的完整脚本中出错。为什么它不起作用?是间接引用的原因吗?

#!/home/$current_user/Desktop/expect
...
    COUNTER=0
         while [  $COUNTER -lt $num ]; do
             let index=COUNTER+1
             tmp=user_$index
             echo "Changing Password for " ${!tmp}
             echo ${!tmp}
             sudo passwd ${!tmp}
             expect -exact "[sudo] password for $current_user: "
             send "$pass\r"
             interact
             expect -exact "New password: "
             send "$password\r"
             interact
             let COUNTER=COUNTER+1 
         done

编辑:!或 /$$ 仅用于调用其他变量内的变量。如果变量是字符串的一部分,我需要帮助。

我有一个关于 Bash 中的间接变量引用的简短问题。

eval "\${user_$index\}"  #First attempt
echo \$${eval "{user_\$index}"} #Second attempt

基本上我有几个名为“user_num”的变量,其中 num 是一个整数。这些变量中的每一个都包含一个字符串值。我想通过调用变量来调用该字符串值。但是,由于变量内部有一个变量 (num),我似乎无法让它工作。我查看了 Bash 中间接引用的手册页,但它们没有提到另一个变量内部的变量附加到字符串的情况。

TLDR:我的问题是你是怎么做到的:

$(var_$num)

【问题讨论】:

  • $current_user 来自哪里?

标签: linux bash variables


【解决方案1】:

这在 bash 中真的很尴尬:你需要一个临时变量来保存构造的变量名:

$ var_1=hello
$ num=1
$ tmp=var_$num
$ echo ${!tmp}
hello

数组更简单

$ var=( [1]=world )
$ echo ${var[$num]}
world

【讨论】:

  • 你能帮我弄清楚为什么整个脚本中的期望部分不起作用吗?我认为这会解决它。
  • Shell 和 Expect 是不同的语言,所以不能这样混淆。你的 shebang 行是期望:使用期望控制结构、条件和算术。
猜你喜欢
  • 2017-01-09
  • 2012-06-01
  • 2020-09-10
  • 2012-12-28
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
相关资源
最近更新 更多