如何动态增加变量。我写了下面的脚本,但它给出了一个错误。
#!/bin/bash
X='101 Hari BAN'
for i in "${X[@]}"
do
"V"$j=`echo $i|cut -d' ' -f$j`
echo "V"$j
j=`expr $j + 1`
done
输出应该是,
V1=101
V2=Hari
V3=BAN
答案1
首先,如果您正在使用bash
并且想要迭代分开的东西,然后使用数组:
X=( 101 Hari BAN "many words" "a * in the sky" )
这允许您通过适当地引用这些字符串来正确处理包含空格和文件名通配模式的字符串。
然后循环数组:
X=( 101 Hari BAN "many words" "a * in the sky" )
for item in "${X[@]}"; do
done
然后就是输出结果的问题了。为此,我们使用计数器 和printf
:
X=( 101 Hari BAN "many words" "a * in the sky" )
n=0
for item in "${X[@]}"; do
printf 'V%d=%s\n' "$(( ++n ))" "$item"
done
格式printf
字符串的V%d=%s\n
意思是“字符V
后跟一个整数,然后是一个=
和一些字符串。以换行符结束”。整数和字符串取自 的其余参数printf
。该变量n
在被使用之前会递增printf
。
#!
添加指向您的解释器的正确行bash
即可完成。
输出将是
V1=101
V2=Hari
V3=BAN
V4=many words
V5=a * in the sky
根据下面的评论,您期望V1
,V2
是变量,但它们显然只是输出中的文本。
再说一次,我认为你在这里需要的不是单独的变量,而是一个数组。
事实上,我们已经拥有的数组X
已经包含必要的数据,因此我们只需重命名它即可。
#!/bin/bash
V=( 101 Hari BAN )
for i in "${!V[@]}"; do
printf 'V[%s] = %s\n' "$i" "${V[i]}"
done
也就是说,您只需使用"${V[0]}"
、"${V[1]}"
等即可访问数组的元素V
。