来自https://unix.stackexchange.com/a/156010/674
请注意,
sh上面的第二个进入内联脚本的$0. 您应该在那里使用相关的东西(如sh或find-sh),而不是像,或空字符串之类的东西_,因为它用于 shell 的错误消息:---Run Code Online (Sandbox Code Playgroud)$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \; inline-sh: ./accept_ra: Permission denied
" _, -,--或空字符串用于 shell 的错误消息" 是什么意思?
为什么使用inline-sh本示例中不工作,因为inline-sh不_,-,--或者空字符串?
谢谢。
$ 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)
的“用于shell的错误消息”的主题是“ $0”不是“ ,或空字符串”。给定的值用于错误消息;所以你不应该为 指定一个无意义的值,否则你最终会得到奇怪的错误消息。这可能更有意义,因为_---$0$0
请注意,
sh上面的第二个进入内联脚本的$0. 您应该使用相关的有什么(如sh或find-sh),不喜欢的东西_,-,--或空字符串,如值$0用于壳的错误信息:
inline-sh 在示例中确实有效:它在错误消息中使用,这是示例的全部内容。