如何在Bash中成对循环$@?
如何在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
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代表,尽管如此。:)