本文介绍了在POSIX sh中迭代位置参数时修改位置参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是便携的吗?
filter() {
set -- CUT "$@"
for x; do
if test "$x" = CUT; then
set -- # ignore args upto here
else # perhaps more filtering
set -- "$@" "$x"
fi
done
printf "'%s' " "$@"; echo
}
filter "$@"
即我可以在迭代时更改"$@"
吗?for
复合是否复制隐式数组?
filter 1 2 CUT 3
似乎适用于dash
、ash
、busybox sh
。
posix
可以,推荐答案确实允许这样做。从标题为The for Loop(下面引用,重点是我的)的部分可以推断,循环保留了它要迭代的项目列表的自己的私有副本,并且在执行循环时对shell执行环境所做的更改不会对所述副本产生任何影响。
换句话说,因为"$@"
的隐式展开在set --
和set -- "$@" "$x"
之前,所以可以保证程序中的循环迭代位置参数的初始列表。
这篇关于在POSIX sh中迭代位置参数时修改位置参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!