shell 命令求解

mvn-entrypoint.sh

find /usr/share/maven/ref/ -type f -exec bash -eu -c 'copy_reference_file /usr/share/maven/ref/ "$1" "$2"' _ {} "$log" \;

想问一下,上面这个命令中 最后的那个 _ (下划线) 是什么意思?

-# Updated on 2017.12.12 17:24

另外,bash -c 指定的命令,$1 与 $2,和 _ {} "$log" 是什么映射关系?
我这边理解是 $1 --> {} 的实际结果,$2 --> $log 的实际结果,然后就不知道 _ 在这边是做什么的了

-# Updated on 2017.12.13 17:02
看了 vvpale 的回答之后,又去看了一下 man bash,命令说明:
-c string If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.

阅读 2.3k
2 个回答

其实这个_没有特殊意义,这个完全是为了满足bash的-c选项对位置参数的语法规定:
选项-c 后面的字符串将作为命令交给bash执行,当这个字符串后面还有参数时,这些参数将作为位置变量传递给这个命令,从$0开始
于是,对于命令 bash -eu -c 'copy_reference_file /usr/share/maven/ref/ "$1" "$2"' _ {} "$log"来说,内部命令 copy_re... $1 $2 后面的三个单词都将作为位置变量,其中$0的值为_,$1的值是{}的结果,$2的值是$log的结果。
可将_换成别的word尝试一下:bash -c 'echo $1 $2' "adsdads xxoo" "hello" "world"

应该是 bash 的参数。

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进