最近在学习一些hadoop的知识,在看到spark时,遇到一段费解的脚本,如下:
点击(此处)折叠或打开
-
CMD=()
-
while IFS= read -d '' -r ARG; do
-
CMD+=("$ARG")
-
done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")
-
exec "${CMD[@]}"
刚看到时完全不知道是啥意思,之后一步一步的翻译,总算有点明白了,写下了作为记录也作为分享。解释如下:
CMD=()
该语句在bash中定义一个空的数组
CMD+=("${ARG}")
即向数组中追加内容
while IFS= read -d '' -r ARG; do
其中IFS制定的是分割符,该语句置为空,IFS变量是bash的内置变量,详见 blog.csdn.net/whuslei/article/details/7187639
done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@")
主要在该句,("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@") 的输出作为while的输入,一行一行的被读入,这里要注意的是两个小于号(<)之间是有一个空格的,如果没有空格会是here文档了。
exec "${CMD[@]}"
执行CMD,其中${CMD[@]}将展开整个数组,各项以空格分开
对上述的while做一个简化,例子如下
-
while read i; do echo $i; done < <(echo "PWD")
大家可以再shell命令行直接执行看看效果
~~end~~
阅读(1919) | 评论(0) | 转发(0) |