如何在 bash 脚本中循环遍历参数

如何在 bash 脚本中循环遍历参数

我想编写一个参数数量未知的 bash 脚本。

我怎样才能理解这些争论并利用它们做点什么?

错误的尝试如下所示:

#!/bin/bash
for i in $args; do 
    echo $i
done

答案1

有一个特殊的语法:

for i do
  printf '%s\n' "$i"
done

更一般地,当前脚本或函数的参数列表可通过特殊变量 获得$@

for i in "$@"; do
  printf '%s\n' "$i"
done

请注意,您需要用双引号引起来$@,否则参数会经历通配符扩展和字段分割。"$@"很神奇:尽管有双引号,它仍会扩展到与参数一样多的字段。

print_arguments () {
  for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special  !\characters' '-n' # prints 4 lines
print_arguments ''                                             # prints one empty line
print_arguments                                                # prints nothing

答案2

#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

您应该引用,$@因为如果您引用参数或使用 . 转义它们,则参数可能包含空格(或换行符等)\。例如:

./myscript one 'two three'

由于引号的缘故,这是两个论点而不是三个。如果您不引用$@,这些参数将在脚本中被分解。

相关内容