我想编写一个参数数量未知的 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'
由于引号的缘故,这是两个论点而不是三个。如果您不引用$@
,这些参数将在脚本中被分解。