Shell 脚本中的数组串联
Array Concatenation in Shell script
我尝试了一个简单的 shell 脚本来查看 statefulset 的图像,然后根据需要替换它们。
我 运行 这个问题是存储的数组值没有正确显示..
这是脚本
#!/bin/bash
##-chronograph3r
##Variables
read -p "Namespace : " NS
##### To find the Image tags in statefulset
app=($(kubectl get statefulset -n $NS -o=name | grep "myapp" | cut -c 18-) )
declare app
imgver=($(kubectl get statefulset -n $NS ${array[@]} -o yaml | egrep "image: asia.gcr.io" ))
declare imgver
#--- To display current image version
for i in $@
do
app[${#app[@]}]=$i
imglist[${#imgver[@]}]=$i
echo $i
done
for (( i==0; i < ${#app[@]}; i++ ))
do
echo "current image version for ${app[$i]} is ${imgver[$i]}"
done
所需的输出应该是,
current image version for myapp1 is image: asia.gcr.io/lucifer/myapp:latest
current image version for myapp2 is image: asia.gcr.io/lucifer/myapp:1.4.2
current image version for myapp3 is image: asia.gcr.io/lucifer/myapp:1.3.0
current image version for myapp4 is image: asia.gcr.io/lucifer/myapp:stable
我得到的输出是
current image version for myapp1 is image: asia.gcr.io/lucifer/myapp:latest
current image version for myapp2 is image:
current image version for myapp3 is image: asia.gcr.io/lucifer/myapp:1.3.0
current image version for myapp4 is image:
当我执行“echo ${imgver[@]}”时
它returns这个
image: asia.gcr.io/lucifer/myapp:latest image: asia.gcr.io/lucifer/myapp:1.4.2 image: asia.gcr.io/lucifer/myapp:1.3.0 image: asia.gcr.io/lucifer/myapp:stable
我认为连接声明的数组是这里的麻烦制造者。
帮我在这里找到问题,或者让我知道是否还有其他方法可以实现所需的输出。
感谢@socowi,我解决了这个问题。在执行 declare -p 时,它列出了变量。由于空格,字符串 image: 也被视为一个单独的变量。我选择了 awk 而不是 egrep,并且能够获得所需的输出。
我尝试了一个简单的 shell 脚本来查看 statefulset 的图像,然后根据需要替换它们。
我 运行 这个问题是存储的数组值没有正确显示.. 这是脚本
#!/bin/bash
##-chronograph3r
##Variables
read -p "Namespace : " NS
##### To find the Image tags in statefulset
app=($(kubectl get statefulset -n $NS -o=name | grep "myapp" | cut -c 18-) )
declare app
imgver=($(kubectl get statefulset -n $NS ${array[@]} -o yaml | egrep "image: asia.gcr.io" ))
declare imgver
#--- To display current image version
for i in $@
do
app[${#app[@]}]=$i
imglist[${#imgver[@]}]=$i
echo $i
done
for (( i==0; i < ${#app[@]}; i++ ))
do
echo "current image version for ${app[$i]} is ${imgver[$i]}"
done
所需的输出应该是,
current image version for myapp1 is image: asia.gcr.io/lucifer/myapp:latest
current image version for myapp2 is image: asia.gcr.io/lucifer/myapp:1.4.2
current image version for myapp3 is image: asia.gcr.io/lucifer/myapp:1.3.0
current image version for myapp4 is image: asia.gcr.io/lucifer/myapp:stable
我得到的输出是
current image version for myapp1 is image: asia.gcr.io/lucifer/myapp:latest
current image version for myapp2 is image:
current image version for myapp3 is image: asia.gcr.io/lucifer/myapp:1.3.0
current image version for myapp4 is image:
当我执行“echo ${imgver[@]}”时
它returns这个
image: asia.gcr.io/lucifer/myapp:latest image: asia.gcr.io/lucifer/myapp:1.4.2 image: asia.gcr.io/lucifer/myapp:1.3.0 image: asia.gcr.io/lucifer/myapp:stable
我认为连接声明的数组是这里的麻烦制造者。 帮我在这里找到问题,或者让我知道是否还有其他方法可以实现所需的输出。
感谢@socowi,我解决了这个问题。在执行 declare -p 时,它列出了变量。由于空格,字符串 image: 也被视为一个单独的变量。我选择了 awk 而不是 egrep,并且能够获得所需的输出。