Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Bash中成对循环$@?_Bash - Fatal编程技术网

如何在Bash中成对循环$@?

如何在Bash中成对循环$@?,bash,Bash,如何在bash中编写一个循环,它的作用如下: for (i=0; i< len("$@"); i+=2) { print a[i], a[i+1] // do stuff using the pair elements. } (i=0;i

如何在bash中编写一个循环,它的作用如下:

for (i=0; i< len("$@"); i+=2) {
    print a[i], a[i+1]
    // do stuff using the pair elements.
}
(i=0;i{ 打印a[i],a[i+1] //使用pair元素做一些事情。 }
与索引到
$@
不同的是,简单的(与POSIX兼容的)方法是在开始时简单地将事情从开头转移:

while [ "$#" -gt 0 ]; do
  echo "$1, $2"
  shift; shift
done
如果您真的想建立索引,并且不介意特定于采用ksh首创的扩展的shell(如bash):

# start at 1 to avoid $0
# quotes in immediately below line because SO syntax highlighter doesn't know bash
for ((i=1; i<("$#" + 1); i+=2)); do
  echo "${@:i:1}, ${@:i+1:1}"
done
#从1开始避免$0
#在第行的正下方加引号,因为语法highlighter不知道bash

对于((i=1;i而不是索引到
$@
),简单的(与POSIX兼容的)方法是在开始时将内容从开始转移:

while [ "$#" -gt 0 ]; do
  echo "$1, $2"
  shift; shift
done
如果您真的想建立索引,并且不介意特定于采用ksh首创的扩展的shell(如bash):

# start at 1 to avoid $0
# quotes in immediately below line because SO syntax highlighter doesn't know bash
for ((i=1; i<("$#" + 1); i+=2)); do
  echo "${@:i:1}, ${@:i+1:1}"
done
#从1开始避免$0
#在第行的正下方加引号,因为语法highlighter不知道bash

对于((i=1;iYeah,bash很好,我使用它,但我也不在脚本中使用bashims。@DigitalRoss,我显然更愿意在脚本中使用bashims(其中一些脚本可以让您在仅依赖POSIX强制功能的情况下稳健地完成不可靠的事情),但我至少试着在它们增加价值的地方这样做。:)当然,你可能会遇到一个核心外壳无法很好地解决的问题,它是宏处理器和编程语言之间的一种折衷。当我切换到Ruby时,lol.@DigitalRoss,那些使用外壳就像使用增强的宏处理器的人是我最头疼的问题之一。宏处理器的核心定义属性是递归的文本替换成代码。如果shell这样做了,那么就不可能在shell中编写安全代码来处理不可信的数据——事实并非如此。@DigitalRoss,……尽管我同意有时间切换到更好的语言;如果正确性和可预测性是您所追求的,我倾向于称Go为比Ruby更好的选择是的,bash很好,我使用它,但我也不在脚本中使用bashims。@DigitalRoss,我显然更愿意在脚本中使用bashims(其中一些脚本让您在仅依赖POSIX强制功能的情况下能够稳健地做一些不可靠的事情),但我至少试着在它们增加价值的地方这样做。:)当然,你可能会遇到一个核心外壳无法很好地解决的问题,它是宏处理器和编程语言之间的一种折衷。当我切换到Ruby时,lol.@DigitalRoss,那些使用外壳就像使用增强的宏处理器的人是我最头疼的问题之一。宏处理器的核心定义属性是递归的文本替换成代码。如果shell这样做了,那么就不可能在shell中编写安全代码来处理不可信的数据——事实并非如此。@DigitalRoss,……尽管我同意有时间切换到更好的语言;如果正确性和可预测性是您所追求的,我倾向于称Go为比Ruby更好的选择g代表,尽管如此。:)