Bash没有扩展一些变量

时间:2017-11-03 18:36:05

标签: bash

我将一些命令存储在一个数组中.Bellow是一个简化的例子

#!/bin/bash
test_arr=()
x="mural.png"
for q in 10 12 14; do
  for i in 4 6 8; do
    test_arr+=("$x_$q_$i")
  done
done
echo "${test_arr[@]}"

unset test_arr
for q in 10 12 14; do
  for i in 4 6 8; do
    test_arr+=("$x"_"$q"_"$i")
  done
done
echo "${test_arr[@]}"

输出:

4 6 8 4 6 8 4 6 8
4 6 8 4 6 8 4 6 8 test_stack.png_10_4 test_stack.png_10_6 test_stack.png_10_8 test_stack.png_12_4 test_stack.png_12_6 test_stack.png_12_8 test_stack.png_14_4 test_stack.png_14_6 test_stack.png_14_8

以下给出了正确的输出

#!/bin/bash
test_arr=()
x="mural.png"
#for q in 10 12 14; do
#  for i in 4 6 8; do
#    test_arr+=("$x_$q_$i")
#  done
#done
#echo "${test_arr[@]}"

unset test_arr
for q in 10 12 14; do
  for i in 4 6 8; do
    test_arr+=("$x"_"$q"_"$i")
  done
done
echo "${test_arr[@]}"

输出:

mural.png_10_4 mural.png_10_6 mural.png_10_8 mural.png_12_4 mural.png_12_6 mural.png_12_8 mural.png_14_4 mural.png_14_6 mural.png_14_8

使用"$x"_"$q"_"$i"而不是"$x_$q_$i"时,为什么变量会扩展?

2 个答案:

答案 0 :(得分:2)

" _"是变量名的有效字符。

"${x}_${q}_$i"

答案 1 :(得分:2)

你不需要循环; bash可以为您进行扩展

$ echo mural.png_{10,12,14}_{4,6,8}

mural.png_10_4 mural.png_10_6 mural.png_10_8 mural....