分页: 1 / 1

bash -c 命令串里面有单引号怎么办?

发表于 : 2014-12-12 15:32

代码: 全选

bash -c 'convert -font ~/MSYH.TTF  -pointsize 80 -draw 'text 400,400 "正立行衣帽"' a.jpg b.jpg'

Re: bash -c 命令串里面有单引号怎么办?

发表于 : 2014-12-12 15:53
susbarbatus

代码: 全选

bash -c "convert -font ~/MSYH.TTF  -pointsize 80 -draw 'text 400,400 \"正立行衣帽\"' a.jpg b.jpg"

Re: bash -c 命令串里面有单引号怎么办?

发表于 : 2014-12-12 18:12
麻烦看一下为啥name赋不了值

代码: 全选

find . -iname '*.JPG' -print0|xargs -n1 -0 -I {} bash -c "name={};echo $name"
如果命令串用单引号

代码: 全选

find . -iname '*.JPG' -print0|xargs -n1 -0 -I {} bash -c 'name={};echo $name'
倒是可以的.

但是命令串里如果带有单引号的内容.就又出错了.

Re: bash -c 命令串里面有单引号怎么办?

发表于 : 2014-12-12 22:26
susbarbatus

代码: 全选

find . -iname '*.JPG' -print0|xargs -n1 -0 -I {} bash -c "name={};echo \$name"
如果用双引号,那么引号内的特殊字符会被 bash 解释,
注意你输入命令的终端是一个 shell,它首先会解释这个特殊字符,
然后你调用的 bash 会解释第二次。

这里的场景,如果用单引号,那么 $ 这个特殊字符不会被解释,而是原样传给了调用的 bash,由这个 bash 去解释,
如果用双引号, $name 被外面的 shell 给解引用了(如果没赋过值那么就是个空字符串),于是传到里面的 bash 的实际命令是

代码: 全选

name={};echo

加个 \ 转义即可。