本文介绍了在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

似乎适用于dashashbusybox sh

posix

可以,推荐答案确实允许这样做。从标题为The for Loop(下面引用,重点是我的)的部分可以推断,循环保留了它要迭代的项目列表的自己的私有副本,并且在执行循环时对shell执行环境所做的更改不会对所述副本产生任何影响。

换句话说,因为"$@"的隐式展开在set --set -- "$@" "$x"之前,所以可以保证程序中的循环迭代位置参数的初始列表。

这篇关于在POSIX sh中迭代位置参数时修改位置参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-19 17:19