【问题标题】:get variable content using another variable inside [duplicate]使用内部的另一个变量获取变量内容[重复]
【发布时间】:2021-03-15 03:46:26
【问题描述】:

请看下面的代码,我的想法是我需要第三行,因为我声明了几个 input_${k} 并用很多值填充它们(所以我迭代了 k)。我通过在此处隔离 1 个变量并仅用“1”填充它来为您保持简单。我唯一的问题是 node.py 行没有收到 input_1_128 的内容(这里使用

declare input_2_128='' 
k=1
declare input_${k}_128+='1'
python3 node.py <<< $(input_${k}_128)

请注意,如果我写了

echo $(input_1_128)

它将显示正确的值 (1),但我必须使用第一个版本(使用 $k)。 如果此处相关,我键入“bash myscript.sh”来运行脚本。 我感谢大家的帮助。 当然,请不要犹豫,询问更多详情

【问题讨论】:

  • 使用 Bash array 来处理数组! (另见Shell parameter expansion。)
  • 大多数人的系统上都没有命令input_1_128。符号$(input_${k}_128) 执行该名称的命令并捕获标准输出。此外,echo $(input_1_128) 的输出不太可能显示正确的输出 - 使用 echo ${input_1_128} 可能会。小心使用 shell 脚本中的空格、引号和括号。
  • @JonathanLeffler 在 4 年的 CS 研究中,这是我第一次听说 Bash 数组,哈哈。非常感谢!但是 input_1_128 不是命令,它是一个变量。抱歉,如果不清楚或者我错过了你的观点
  • 那么是时候阅读manual——从上到下。好吧,你可以跳过第 7 章以后的章节和附录,但是如果不了解第 1 章到第 6 章中的大部分内容,你就无法充分利用 Bash。如果没有别的,你需要知道小节标题中的内容。我知道你认为input_1_128 是一个变量。但是您使用了错误的括号将表达式视为变量。你有$(input_1_128);你需要${input_1_128}。差异至关重要!

标签: bash


【解决方案1】:

首先是您原始问题的几个答案(间接和名称引用)以及我建议您做的事情(数组):

  1. 使用语法 ${!...} 的间接访问:
$ k=1
$ declare input_${k}_128=1

$ v=input_${k}_128
$ echo ${!v}
1

$ declare input_${k}_128=$((${!v} + 1))
$ echo ${!v}
2
  1. 名称参考:
$ k=1
$ declare input_${k}_128=1

$ declare -n v=input_${k}_128
$ echo $v
1

$ v=$(($v + 1)); echo $v; echo $input_1_128
2
2
  1. 关联数组:
$ declare -A a
$ a[input_${k}_128]=1
$ echo ${a[input_${k}_128]}
1

$ a[input_${k}_128]+=1
$ echo ${a[input_${k}_128]}
11

$ # if you mark the variable an integer you can use += 1
$ declare -i a[input_${k}_128]
$ a[input_${k}_128]+=1
$ echo ${a[input_${k}_128]}
12

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2012-03-30
    • 1970-01-01
    • 2016-01-08
    • 2014-01-22
    相关资源
    最近更新 更多