“`_`、`-`、`--` 或空字符串用于shell 的错误消息”是什么意思?

Tim*_*Tim 0 bash find

来自https://unix.stackexchange.com/a/156010/674

请注意,sh上面的第二个进入内联脚本的$0. 您应该在那里使用相关的东西(如shfind-sh),而不是像,或空字符串之类的东西_,因为它用于 shell 的错误消息:---

$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \;
inline-sh: ./accept_ra: Permission denied
Run Code Online (Sandbox Code Playgroud)

" _, -,--或空字符串用于 shell 的错误消息" 是什么意思?

为什么使用inline-sh本示例中不工作,因为inline-sh_---或者空字符串?

谢谢。

Sté*_*las 7

$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \;
inline-sh: ./accept_ra: Permission denied
Run Code Online (Sandbox Code Playgroud)

错误消息告诉您inline-sh无法打开./accept_ra文件。

$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' _ {} \;
_: ./accept_ra: Permission denied
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' '' {} \;
: ./accept_ra: Permission denied
Run Code Online (Sandbox Code Playgroud)

使用户不那么明显并且更容易混淆实际上无法打开它的原因./accept_ra

因此,建议为sh -c 'code'.之后的第一个参数使用有意义的值。重复命令名称通常就可以了。如

sh -c 'code using "$@"' sh  actual arguments to the inline script
Run Code Online (Sandbox Code Playgroud)


Ste*_*itt 6

的“用于shell的错误消息”的主题是“ $0”不是“ ,或空字符串”。给定的值用于错误消息;所以你不应该为 指定一个无意义的值,否则你最终会得到奇怪的错误消息。这可能更有意义,因为_---$0$0

请注意,sh上面的第二个进入内联脚本的$0. 您应该使用相关的有什么(如shfind-sh),不喜欢的东西_---或空字符串,如值$0用于壳的错误信息:

inline-sh 在示例中确实有效:它在错误消息中使用,这是示例的全部内容。