如何使用for循环评估函数参数

时间:2015-02-16 15:19:48

标签: linux shell ash

我想用for循环

解析我的函数参数
func() {
  for arg in $*; do
    echo "$arg"
  cone
}

如果我的所有参数都没有空格

,这样可以正常工作
func "111" "222" "333"

但是对于带空格的args来说它失败了

func "111" "222 222" "333"

2 个答案:

答案 0 :(得分:2)

请勿使用$*,而是使用"$@"

for arg in "$@" ; do
     echo "$arg"
done

说明:如果没有双引号,$*$@是相同的。但是,在双引号内,它们是不同的。有关详细信息,请参阅man bash中的“特殊参数”:

  

*从1开始扩展到位置参数。当扩展发生在双引号内时,它会扩展为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,"$*"等同于"$1c$2c...",其中c是IFS变量值的第一个字符。如果未设置IFS,则参数由空格分隔。如果IFS为null,则连接参数时不会插入分隔符。

     

@从1开始扩展到位置参数。当扩展发生在双引号内时,每个参数都会扩展为单独的单词。也就是说,"$@"相当于"$1" "$2" ...如果双引号扩展发生在单词中,则第一个参数的扩展与原始单词的开头部分连接,并且扩展最后一个参数与原始单词的最后一部分连接在一起。如果没有位置参数,"$@"$@会展开为空(即删除它们)。

答案 1 :(得分:1)

将此功能与"$@"一起使用,而不是使用不带引号的$*

func() { for arg in "$@"; do echo "$arg"; done; }

然后将其称为:

func "111" "222 222" "333"
111
222 222
333