在许多SO问题和bash教程中,我看到我可以通过两种方式访问bash脚本中的命令行参数:
$ ~ >cat testargs.sh
#!/bin/bash
echo "you passed me" $*
echo "you passed me" $@
这导致:
$ ~> bash testargs.sh arg1 arg2
you passed me arg1 arg2
you passed me arg1 arg2
< code>$*和< code>$@有什么区别?< br >什么时候应该使用前者,什么时候应该使用后者?
$*
从1开始,扩展到位置参数。当在双引号中展开时,它会展开为一个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,“$*”相当于“$1c$2c ...”,其中c是IFS变量值的第一个字符。如果未设置IFS,则参数用空格分隔。如果IFS为null,则连接参数时不插入分隔符。
$@
展开到位置参数,从一个开始。当扩展发生在双引号内时,每个参数将扩展为一个单独的单词。也就是说,“$@”相当于“$1”“$2”......如果双引号扩展发生在单词内,则第一个参数的扩展与原始单词的开头部分连接,最后一个参数的扩展与原始单词的最后一部分连接。当没有位置参数时,“$@”和$@将扩展到零(即,它们被删除)。
来源:巴什曼
来自Bash黑客Wiki的一个很好的概览表:
当引用特殊参数时,差异就出现了。让我来说明不同之处:
$ set -- "arg 1" "arg 2" "arg 3"
$ for word in $*; do echo "$word"; done
arg
1
arg
2
arg
3
$ for word in $@; do echo "$word"; done
arg
1
arg
2
arg
3
$ for word in "$*"; do echo "$word"; done
arg 1 arg 2 arg 3
$ for word in "$@"; do echo "$word"; done
arg 1
arg 2
arg 3
关于引用重要性的另一个例子:请注意,“arg”和数字之间有2个空格,但如果我没有引用$word:
$ for word in "$@"; do echo $word; done
arg 1
arg 2
arg 3
在bash中,“$@”
是要迭代的“默认”列表:
$ for word; do echo "$word"; done
arg 1
arg 2
arg 3
Rust教程没有解释如何从命令行获取参数。在所有示例中,< code>fn main()只显示了一个空参数列表。 从 访问命令行参数的正确方法是什么?
为了方便起见,我们支持在运行 Blade 应用的时候修改一些配置,比如我在运行时指定端口: java -jar blade-app.jar --server.port=9088 当然还支持一些其他的命令行参数,看看下面的表格: 命令行参数 描述 示例 server.address 服务地址,默认是本机 0.0.0.0 回环地址 --server.address=192.168.1.100 serv
1.2. 命令行参数 大多数的程序都是处理输入,产生输出;这也正是“计算”的定义。但是, 程序如何获取要处理的输入数据呢?一些程序生成自己的数据,但通常情况下,输入来自于程序外部:文件、网络连接、其它程序的输出、敲键盘的用户、命令行参数或其它类似输入源。下面几个例子会讨论其中几个输入源,首先是命令行参数。 os包以跨平台的方式,提供了一些与操作系统交互的函数和变量。程序的命令行参数可从os包的Ar
'-m' 选项 显示所有编译的模块,自1.4.0以来,Tengine支持动态模块,static表示静态编译,shared表示动态编译(后面接的是动态模块的版本)。下面是例子: $ nginx -m Tengine version: Tengine/1.4.1 (nginx/1.2.3) loaded modules: ngx_core_module (static) ng
V2Ray V2Ray 的程序文件的命令行参数如下: v2ray [-version] [-test] [-config=config.json] [-format=json] -version 只输出当前版本然后退出,不运行 V2Ray 主程序。 -test 测试配置文件有效性,如果有问题则输出错误信息,不运行 V2Ray 主程序。 -config 配置文件路径,可选的形式如下: 本地路径,可
所有标志都是可选的,但是有些必须跟指定标志组合使用才生效。 标志 默认 描述 示例 --shell null 进入 REPL 模式 --allow-cors false 打开 CORS 兼容模式,这将允许从托管在任何域中的网站内连接到 Appium 服务器。启用此功能时要小心,因为如果您访问的网站使用跨域请求,在 Appium 服务器上启动或运行内省会话,则可能存在安全风险。 --ipa null