我知道 sh 只是调用默认 shell,所以“bash -”的意思是一样的。但有人可以向我解释一下语法吗?我尝试查看 bash 手册,但找不到。我遇到这个是因为我想执行命令的输出。前任。
echo date | sh -
打印出日期。
答案1
是的,sh -
确实bash -
是一样的意思。
在 man bash 中,有这样的描述(强调我的):
--
A -- 表示选项结束并禁用进一步的选项处理。 -- 之后的任何参数都被视为文件名和参数。 - 的参数相当于 -
这仅仅意味着它表示选项的结束,并且任何后续标记都是参数(而不是选项),即使它们以破折号开头-
。
还有一个POSIX sh 有类似的描述。
因此,POSIX.1-2017 的这卷除了使用常规的“--”参数之外,还允许使用单个标记选项的结尾,因为人们认为旧的做法非常普遍。
这个命令:
$ echo "date" | sh -
Mon Feb 12 00:00:00 UTC 2018
但也这样做:
$ echo "date" | sh
Mon Feb 12 00:00:00 UTC 2018
和这个
$ echo "date" | sh -s
Mon Feb 12 00:00:00 UTC 2018
这将明确正在执行的内容:
$ echo "date" | sh -x
+ date
Mon Feb 12 00:00:00 UTC 2018
但这会失败:
$ echo "date" | sh - -x
sh: 0: Can't open -x
这意味着日期字符串被作为命令从标准输入读取,破折号 (-) 表示选项结束并开始参数(与 -- 相同)。