Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中,有没有一种方法可以在变量中替换或嵌套变量?_Bash - Fatal编程技术网

在bash中,有没有一种方法可以在变量中替换或嵌套变量?

在bash中,有没有一种方法可以在变量中替换或嵌套变量?,bash,Bash,假设我有两个变量 var_one_string=foo var_two_string=bar 我将如何完成这样的事情(伪代码示例) 例1 for i in one two; do echo $var_${i}_string done # Desired output foo bar 例2 for i in one two; do echo $var_$(echo ${i})_string done # Desired output foo bar 我知道这是一种糟糕的替换,我只是想

假设我有两个变量

var_one_string=foo
var_two_string=bar
我将如何完成这样的事情(伪代码示例)

例1

for i in one two; do
  echo $var_${i}_string
done
# Desired output
foo
bar
例2

for i in one two; do
  echo $var_$(echo ${i})_string
done
# Desired output
foo
bar
我知道这是一种糟糕的替换,我只是想知道是否有办法在另一个变量调用中嵌套字符串

编辑:我能让它工作

var_one_string=foo
var_two_string=bar

for i in $(echo ${!var_*}); do
    echo ${!i}
done
foo
bar

基本上,您可以使用
eval
echo$(eval'$var'''${i}”)

但你也可以使用词汇:

declare -A vars
vars=( ["one"]="number-one" ["two"]="number-two" )
i="one"
echo "${vars[${i}]}"

bash
中使用内置的
declare
和间接变量扩展。首先将数组中动态性质的元素定义为

#!/bin/bash

list=(one two)
unset count

for var in "${list[@]}"; do 
    declare var_${var}_string="string"$((++count))
done
现在使用间接展开访问创建的变量

for var in "${list[@]}"; do 
    dymv="var_${var}_string"
    echo "${!dymv}"
done

对于此要求,切勿使用
eval
。可能是危险的,因为不太可能使用有害命令进行代码注入。

输入所需的输出。不确定您到底想要什么。添加了所需的输出。除了重复许多其他StackOverflow问题之外,这是。@s3d83d,…顺便说一句,不管是否经常使用,最好使用功能更强大的数据结构来代替间接扩展。(一个关联数组,一个通过nameref和c访问的数字索引数组)。感谢Charles Duffy,我能够让它使用间接扩展。好的,那么数组将使用我的“原始”示例。但是,如果嵌套变量构造更像这样会怎么样;var_one_string=string1;echo$var{i}\u字符串。我将把这个添加到我原来的问题中。好吧,你告诉我我的问题不是我想要的,它是否仍然适用于我更新的问题。(即var_one_string=string1)@s3d83d:查看我的更新哈哈,你在向我展示我对提问的厌恶。再说一遍,我不打算在var集合中创建一个模式。我更新的问题怎么样。@s3d83d:您需要动态地将变量值赋值给
declare
。如果脚本向用户请求变量并存储它,可以吗?我更希望它是自治的。到目前为止,用户输入仅限于y/n…。希望将其保留在那里。