在for循环之前使用数组变量替换声明变量

时间:2019-07-12 01:48:45

标签: bash

我试图在另一个变量(B)中包含对变量(A)的引用。 B在for循环期间从数组中获取其值,我希望A也获得相同的值,但这不起作用。

#!/bin/bash
A=$B

ARRAY=( 1 2 3 )

for B in ${ARRAY[@]}
  do
  echo "A="$A
  echo "B="$B
done

我如何使$A$B具有相同的值?

2 个答案:

答案 0 :(得分:2)

使用bash >=4,您可以使用nameref完成所需的操作。使用namerefdeclarelocal选项创建-n。要将A创建为nameref的{​​{1}},您可以使用:

B

然后使用您的脚本:

declare -n A=B      ## declare A as a 'nameref' of B

使用/输出示例

#!/bin/bash

declare -n A=B      ## declare A as a 'nameref' of B

ARRAY=( 1 2 3 )

for B in ${ARRAY[@]}
do
    echo "A="$A
    echo "B="$B
done

答案 1 :(得分:0)

不确定这是否可以按照您想要的方式回答您的问题,但是我相信A仅需要在for循环中分配,而不是在脚本的开头分配,因为B没有值。

#!/bin/bash
A=$B
# B is not assigned there which is why A is ""
echo "B: $B"
ARRAY=( 1 2 3 )

for B in ${ARRAY[@]}
  do
  # B is assigned here so A is assigned the same value
  A=$B
  echo "A="$A
  echo "B="$B
done

输出

B:
A=1
B=1
A=2
B=2
A=3
B=3