【发布时间】:2012-12-26 16:23:25
【问题描述】:
我在使用 sed 和单引号时遇到问题
我有一个这样的字符串:
-cmd af -i 3 -a
我想把这个字符串改成
-cmd 'af -i 3 -a'
现在我正在使用这个:
字符串存储在buff变量中
buff=$(echo $buff | sed -r "s/cmd /CMD '/g")"'"
它回响了-cmd 'af -i 3 -a'
然后我调用一个以 buff 作为参数的函数,在使用 ksh -x 执行脚本时,我可以看到调用不正常
+ buff=$'-CMD \'af -i 3 -a \''
+ echo -CMD $'\'af' -i 3 -a $'\''
-CMD 'af -i 3 -a' #this is the echo
+ functionTest -CMD $'\'af' -i 3 -a $'\''
结果它总会给我
-CMD $'\'af' -i 3 -a $'\''
所以基本上看来我的单引号被解释为$'\''
我不知道为什么,我尝试了很多东西,例如转义字符,但它给了我完全相同的结果,即使使用 \x27
【问题讨论】:
-
如果您尝试将带有参数的命令存储在字符串中,那么您做错了;你应该改用数组。
-
不,只是想在那里格式化一个字符串
-
您的命令在这里运行良好:
buff="-cmd af -i 3 -a"; buff=$(echo $buff | sed -r "s/cmd /CMD '/g")"'"; echo "$buff"输出-CMD 'af -i 3 -a'。 -
但是我尝试用这个字符串作为参数调用一个函数,当我 ksh -x 调用时,我可以看到它的格式与我放置的方式相同 -CMD $'\'af' - i 3 -a $'\''
-
您应该在问题中告诉我们一切。我们不是通灵者。