一个for默认循环将遍历所有的命令行参数,如果你不指定in子句:
for arg; do
echo "$arg"
done
Run Code Online (Sandbox Code Playgroud)
如果你想要明确,你可以得到所有的论点"$@".上面的循环相当于:
for arg in "$@"; do
echo "$arg"
done
Run Code Online (Sandbox Code Playgroud)
从bash手册页:
特殊参数
$@- 从1开始扩展到位置参数.当扩展发生在双引号内时,每个参数都会扩展为单独的单词.也就是说,"$@"相当于"$1" "$2" ....如果双引号扩展发生在一个单词中,则第一个参数的扩展与原始单词的开头部分连接,最后一个参数的扩展与原始单词的最后一部分连接.当没有位置参数时,"$@"并$@扩展为空(即,它们被移除).
对于重型参数处理,getopt+ shift是要走的路.getopt将预处理命令行,以便为用户提供一些指定参数的灵活性.例如,它将扩展-xzf为-x -z -f.它--在将标志与文件名分开的所有标志之后添加一个参数; 这使您可以运行cat -- -my-file以显示-my-file前导短划线上没有barfing 的内容.
试试这个样板代码的大小:
#!/bin/bash
eval set -- "$(getopt -o a:bch -l alpha:,bravo,charlie,help -n "$0" -- "$@")"
while [[ $1 != -- ]]; do
case "$1" in
-a|--alpha)
echo "--alpha $2"
shift 2
;;
-b|--bravo)
echo "--bravo"
shift
;;
-c|--charlie)
echo "--charlie"
shift
;;
-h|--help)
echo "Usage: $0 [-a ARG] [-b] [-c]" >&2
exit 1
;;
esac
done
shift
Run Code Online (Sandbox Code Playgroud)
请注意,每个选项都有一个短的等长,例如-a和--alpha.该-a标志接受一个参数,因此它在调用中指定为a:和,并且在其大小写结尾处.alpha:getoptshift 2
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |