问题描述:
一个简单的bash for whilerun_test() { EXEC_CMD=$1 while [[ 1 == 1 ]] do echo "${EXEC_CMD}" ${EXEC_CMD} #----------1 done } run_test "bash replay_spe use_all"1 的位置本来写的是
`${EXEC_CMD}`
但是从执行结果上第二次无法执行 bash replay_spe use_all
解决:
修改为问题描述中没有反引号的代码就ok了,来解释一下
- 反引号
两个反引号包围起来的字符串,将作为命令来运行,执行的输出结果作为该反引号的内容,称为命令替换。反引号包围起来的字符串将被运行,取其结果
它有另一种更好的写法:$(command)
Shell script规范2.6.3节中写道:
而pope的目标是执行这个传入的 bash replay_spe use_all,而非执行这个 bash replay_spe use_all的屏幕输出,所以要在1中去掉反引号。Command substitution shall occur when the command is enclosed as follows:
$(command)
or (backquoted version):
`command`
而错误中看到的第二次执行其实是while中的第一次执行,而第一次执行,是传入参数时就开始执行的。;)ok,6个icecream 值了,:)
参考:
https://www.jianshu.com/p/7f910c38e65ehttps://www.jianshu.com/p/ed41f2e48464
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_03
没有评论:
发表评论