Shell - 带有命令和增量命令值的循环数组

时间:2015-06-01 13:34:08

标签: arrays shell unix scripting

ProcessBuilder.environment()

不要像上面的代码那样重复,我需要:

  1. 循环相同的命令
  2. 增加值({print $ 1} {print $ 2})
  3. 将值存储在数组中
  4. 我正在做类似下面的事情,但我被困住了也许有人可以帮助我:

        var1=$(echo $getDate | awk '{print $1} {print $2}')
        var2=$(echo $getDate | awk '{print $3} {print $4}')
        var3=$(echo $getDate | awk '{print $5} {print $6}')
    

    PS - 使用ksh

    问题:$ COMMAND存储$ locationA中找到的文件数。我需要循环查找找到的文件数量并将其日期存储在数组中。

3 个答案:

答案 0 :(得分:0)

我没有得到你的示例代码的含义('for'循环应该做什么?变量COMMAND的内容是什么?),但在你的问题中,你要求在 array ,而在你希望简化的代码中,你不使用数组,而是简单的变量(var1,var2,....)。

如果我理解你的要求,你的变量getDate包含一个由空格分隔的几个单词的字符串,你想要将前两个单词分配给var1,将以下两个单词分配给var2,依此类推。这是对的吗?

答案 1 :(得分:0)

现在编辑的代码至少有点清楚了,虽然我仍然不明白,为什么你使用i作为循环变量,并在循环内的第一个语句中覆盖它。

然而,一些评论:

  • 如果你将“$ i”推入数组,你会得到一个字面上的“$”符号,后跟字母“i”。要添加包含数字的变量i,您需要双引号(“$ i”)。

  • 我不明白为什么要循环变量COMMAND的连接。此变量将始终包含一个数字,这意味着循环将只执行一次。

  • 您可以使用计数循环,在每次迭代时将循环变量递增2。您必须事先预先计算迭代次数。

  • 也许更简单的替代方案,可以在bash或zsh中工作(我没有尝试其他shell)是首先在数组中转换变量,

    tmparr =($(echo $ getDate | fmt -w 1))

然后使用循环来收集这个元素的对:

myarray=()
for ((i=0; i<${#tmparr[*]}; i+=2))
do
    myarray+=("${tmparr[$i]} ${tmparr[$((i+1))]}")
done

$ {myarray [0]}将包含一个字符串,其中包含来自getDate等的第一个单词。

答案 2 :(得分:0)

这个应该适用于zsh,至少对于较新的版本:

myarray=()
echo $g|fmt -w 1|paste -s -d " \n"|while read s; do myarray+=("$s"); done

这使第一对留在$ {myarray [1]}等等。

它不适用于bash(和旧的zsh版本),因为这些shell会在子shell中执行循环体。

增加:

再想一想,在zsh中这个更简单:

myarray=("${(f)$(echo $g|fmt -w 1|paste -s -d ' \n')}")