bash - 如何在 Bash 中构建循环

标签 bash ubuntu

我想编写一个循环遍历数组的脚本,循环将考虑每一轮中的当前值和后续值,例如 -

VARIABLES=( 10 20 30 40 50 80 )

for i in ${VARIABLES[@]}; do   ## Ideally it should stop at 2nd last value 
        #Value1=$i 
        #Value2=$(i+1)
done 

如何以正确的方式实现相同的目标?

最佳答案

我有几个变种,首先使用函数和 shift

values=( 10 20 30 40 50 80 )

get_paired_values () {
    while [[ $@ ]]; do
        value1=$1 value2=$2
        echo "$value1 $value2"
        shift 2
    done
}

get_paired_values "${values[@]}"

第二次使用 while循环索引,更优雅)
i=0
while [[ ${values[$i]} ]]; do
    value1=${values[$i]}  ; ((i++)); value2=${values[$i]}
    echo "$value1 $value2"; ((i++))
done

第二种方法的变体,但使用 slice 和 read
i=0
while [[ ${values[$i]} ]]; do
    read   value1  value2 <<< ${values[@]:$i:2}
    echo "$value1 $value2"; ((i+=2))
done

关于bash - 如何在 Bash 中构建循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60653344/

相关文章:

bash - 如何从用 bash 编写的 CGI 脚本中获取 POST 参数?

bash - 将 grep 输出重定向到文件

linux - 编译 C 时使用旧版本的共享 linux 库

node.js - 为进程提供变量或名称以终止此实例的每个进程,但仅使用给定的名称(变量)?

ios - 如何从 shell 获取连接的 iOS 设备的 WiFi IP?

linux - 显示加载了 shell 变量的文件内容

linux - sudo 选项适用于终端,但不适用于 xwindow

mysql - dockerfile mysql安装链接数据目录

ubuntu - 使用 Snapcraft 安装软件包时出现 "store.RevisionNotAvailable"错误

php - 多 PHP 如何在 Ubuntu 14.04 上安装带有 PEAR 和扩展的 php 5.3