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

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

最佳答案

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来满足此要求。可能很危险,因为有害命令不太可能进行代码注入(inject)。

关于bash - 在bash中,有没有办法在变量中替换或嵌套变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918700/

相关文章:

php - 一起在 PHP trail 中运行一些 Linux 命令

bash - 如何在CloudFormation中传入UserData作为参数

bash - sh 和 Bash 之间的区别

linux - grep -v 除了模式

linux - Ubuntu 中“which”命令不输出任何内容

linux - 在 bash 中检查空字符串

ruby - rvm system-wide install : Warning! PATH 未正确设置

linux - 在 bash 中移动文件异常

regex - crontab 中的 grep 无法正常工作

bash - 从文件中读取行,在第二个文件中进行 grep,并为每个 $line 输出一个文件