Zha*_*ang 4 command-line bash dash-shell sh
我知道
sh -c 'echo $1' sh 4
Run Code Online (Sandbox Code Playgroud)
将输出4. 和
sh -c 'echo $2' sh 4 5
Run Code Online (Sandbox Code Playgroud)
将输出5.
但我无法理解第二个之后的参数如何sh传递给旁边的命令sh -c。我阅读了两者的手册页bash,dash但找不到有关这种语法的介绍。
这种行为实际上是由POSIX 标准指定的,所有类似 Bourne 的 shell 都应该支持该标准以声称自己是可移植的。
sh -c [-abCefhimnuvx] [-o 选项]... [+abCefhimnuvx] [+o 选项]... 命令字符串 [命令名称 [参数...]]
看到command_string参数了吗?现在让我们看一下-c标志说明:
-C
从 command_string 操作数读取命令。根据 command_name 操作数的值设置特殊参数 0 的值(请参阅特殊参数),并从剩余的参数操作数中按顺序设置位置参数($1、$2 等)。不得从标准输入读取任何命令。
换句话说,普通 shell 脚本中的 where $0(通常是交互模式下的 shell 名称或运行脚本时的脚本名称)将由 shell 本身设置,-c您必须自己指定。因此,
sh -c 'echo Hi, I am $0 , my first positional parameter is $1' foobar 5
Run Code Online (Sandbox Code Playgroud)
会将进程名称设置为shfoobar。
以防万一您想知道它是什么, Shell 命令语言规范$0的“特殊参数”部分也介绍了它:
0
(零。)扩展为 shell 或 shell 脚本的名称。
| 归档时间: |
|
| 查看次数: |
2987 次 |
| 最近记录: |