Shell,连接 2 个字符串以引用第三个变量

Hug*_*ugo 6 shell bash shell-script

我正在尝试在我的脚本中执行以下操作:

#/bin/bash -x
var1=www
var2=www2
var3=www3
var4=www4
for i in 1 2 3 4; do
   echo \$var$i
done
Run Code Online (Sandbox Code Playgroud)

显然,这不会按预期工作并导致以下输出:

$var1
$var2
$var3
$var4
Run Code Online (Sandbox Code Playgroud)

如何动态引用循环中的变量?

Adr*_*rth 11

你在找这个吗?

$ cat indirection.bash
#!/bin/bash -x

var1=www
var2=www2
var3=www3
var4=www4
for i in 1 2 3 4; do
        s="var${i}"
        echo "${!s}"
done
Run Code Online (Sandbox Code Playgroud)

 

$ ./indirection.bash
www
www2
www3
www4
Run Code Online (Sandbox Code Playgroud)


ahi*_*end 7

你可以使用一个数组:

#/bin/bash -x

declare -a vars=(
    www
    www2
    www3
    www4
)

for var in "${vars[@]}"; do
   echo "$var"
done
Run Code Online (Sandbox Code Playgroud)

或者用索引迭代:

for i in "${!vars[@]}"; do
    echo "${vars[$i]}"
done
Run Code Online (Sandbox Code Playgroud)

  • 注意,您总是希望引用 `"${vars[@]}"`,否则 for 循环将在数组元素值中的任何空格处中断。例如`var=("elem 1" "elem 2")`。如果您想要这种(通常是意外的)行为,请仅省略双引号。 (5认同)