“sh-”是什么意思?

“sh-”是什么意思?

我知道 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

这意味着日期字符串被作为命令从标准输入读取,破折号 (-) 表示选项结束并开始参数(与 -- 相同)。

相关内容