首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双引号中的Bash双引号

双引号中的Bash双引号
EN

Stack Overflow用户
提问于 2022-04-01 09:11:18
回答 2查看 62关注 0票数 0

类似的线程:

How can I escape a double quote inside double quotes?

我有一个带有GNU的freebsd盒,版本为4.4.0(0)-release。

在此框中有一个运行rsync的shell脚本,此脚本需要指定一个具有空间的rsync路径参数。

dqt='"'

RSYNC="/usr/local/bin/rsync -avzn --rsync-path=${dqt}sudo rsync${dqt}"

解释器是bash,但只是为了确保我已经使用了专门的bash -x,下面是我得到的内容:

+ /usr/local/bin/rsync -avzn '--rsync-path="sudo' 'rsync"' --numeric-ids --delete ...

哪一个会导致rsync错误:语法或用法错误。有什么办法解决这个问题吗?

运行rsync罚款如下:

rsync-path="sudo rsync"

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-01 09:21:16

您的rsync命令似乎是分词的。不能将完整命令存储在变量中,必须使用数组:

代码语言:javascript
复制
RSYNC_ARR=( /usr/local/bin/rsync -avzn --rsync-path="sudo rsync" )

"${RSYNC_ARR[@]}" # the double quotes are mandatory here

通过一个小小的测试来了解不同之处:

代码语言:javascript
复制
#!/bin/bash

RSYNC='/usr/local/bin/rsync -avzn --rsync-path="sudo rsync"'

RSYNC_ARR=( /usr/local/bin/rsync -avzn --rsync-path=sudo\ rsync )

set -x

: $RSYNC
#+ : /usr/local/bin/rsync -avzn '--rsync-path="sudo' 'rsync"'

: ${RSYNC_ARR[@]}
#+ : /usr/local/bin/rsync -avzn --rsync-path=sudo rsync

: "$RSYNC"
#+ : '/usr/local/bin/rsync -avzn --rsync-path="sudo rsync"'

: "${RSYNC_ARR[@]}"
#+ : /usr/local/bin/rsync -avzn '--rsync-path=sudo rsync'
票数 0
EN

Stack Overflow用户

发布于 2022-04-01 09:15:43

您必须将报价从双引号改为单引号,例如:

代码语言:javascript
复制
RSYNC="/usr/local/bin/rsync -avzn --rsync-path="'"sudo rsync"'

我在一个很小的bash脚本中使用了这一点:

代码语言:javascript
复制
#!/bin/bash -x

RSYNC="/usr/local/bin/rsync -avzn --rsync-path="'"sudo rsync"'
echo "#" $RSYNC "#"

eval "$RSYNC"

其结果是:

代码语言:javascript
复制
+ RSYNC='/usr/local/bin/rsync -avzn --rsync-path="sudo rsync"'
+ echo '#' /usr/local/bin/rsync -avzn '--rsync-path="sudo' 'rsync"' '#'
# /usr/local/bin/rsync -avzn --rsync-path="sudo rsync" #
+ eval '/usr/local/bin/rsync -avzn --rsync-path="sudo rsync"'
++ /usr/local/bin/rsync -avzn '--rsync-path=sudo rsync'
./x: line 6: /usr/local/bin/rsync: No such file or directory

好的,我在/usr/local中没有rsync,但是您可以看到最后一个参数,--rsync-path=sudo rsync是用单引号括起来的,因此是一个纪念碑,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71704508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档