gpt4 book ai didi

linux - Unix bash shell 脚本 - 在 'for' 循环中迭代数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:14 24 4
gpt4 key购买 nike

我有以下测试脚本:

#!/bin/sh

testArray=(A,B,C,D,E)
currentValue=''
tempValue=x

for i in "${testArray[@]}"
do
currentValue=$i

echo "Processing " ${currentValue}

if [ ${currentValue}==A ]
then
tempValue="$i 123"
else
tempValue=$i
fi

echo "Current loop " ${tempValue}
echo `date`

done

当我测试它时,我得到的输出是

Processing  A,B,C,D,E
Current loop A,B,C,D,E 123
Mon Dec 2 20:33:26 GMT 2013

看起来 Bash 中的“for”循环在某种程度上与我所习惯的有所不同,因为我期待以下输出(即“for”循环中的任何内容都将对每个数组元素重复)

Processing  A
Current loop A 123
Mon Dec 2 20:29:44 GMT 2013

Processing B
Current loop B
Mon Dec 2 20:29:45 GMT 2013

Processing C
Current loop C
Mon Dec 2 20:29:46 GMT 2013

Processing D
Current loop D
Mon Dec 2 20:29:47 GMT 2013

Processing E
Current loop E
Mon Dec 2 20:29:48 GMT 2013
  • 为什么最后是 123?
  • 为什么date命令只执行一次而不是每次迭代都执行一次
  • 我该怎么做才能使每次迭代都正常工作。

基本上我想要实现的是编写一个脚本,该脚本遍历数组列表并根据依赖于数组中当前项的值的不同参数执行相同的命令。我写了上面的脚本来尝试理解 for 循环是如何工作的,但我没有得到我期望的输出。

最佳答案

这一行

testArray=(A,B,C,D,E)

创建一个只有一个元素的数组,即字符串 'A,B,C,D,E'。数组元素由空格而不是逗号分隔。使用

testArray=(A B C D E)

您还需要在 if 语句中添加空格(从技术上讲,您应该在 [...] 中使用 = , 而不是 ==, 以及引用参数扩展):

if [ "${currentValue}" = A ]

关于linux - Unix bash shell 脚本 - 在 'for' 循环中迭代数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com