在Bash中显示奇怪单引号的字符串变量输出
我有以下脚本在Bash中显示奇怪单引号的字符串变量输出,bash,shell,glusterfs,Bash,Shell,Glusterfs,我有以下脚本 #!/bin/bash set -o xtrace gluster_volume="a.example.com:/data/brick1/gv0 b.example.com:/data/brick1/gv0" gluster volume create gv0 replica 2 ${gluster_volume} force 在执行第二行时,该脚本抛出与gluster_卷相关的错误,该卷无法读取完整的行,并且仅考虑a.example.com:/data/br
#!/bin/bash
set -o xtrace
gluster_volume="a.example.com:/data/brick1/gv0 b.example.com:/data/brick1/gv0"
gluster volume create gv0 replica 2 ${gluster_volume} force
在执行第二行时,该脚本抛出与gluster_卷相关的错误,该卷无法读取完整的行,并且仅考虑a.example.com:/data/brick1/gv0 b.example.com
(看起来gluster命令无法解析它)
然后我用trace运行这个脚本,发现这个命令如下
gluster volume create gv0 replica 2 'a.example.com:/data/brick1/gv0 b.example.com:/data/brick1/gv0' force
所以脚本添加了单引号,这就产生了问题。我的印象是,这是由于set-o xtrace
单引号不是值的一部分,只是显示的命令行的一部分。但事实并非如此。若我在命令提示符下运行上述命令,它会给出相同的错误,并且在删除引号时,它会起作用
如何更改脚本,使其不添加引号?(我试图用sed删除quote,但不起作用,在运行时发生了一些事情)
我需要带有动态值的gluster\u卷
更新1:
workers=`echo "${WORKER_HOST_IP}"|sed "s/,$//"`
IFS=','
for worker in ${workers}; do
IFS='-' read -r -a array <<< "$worker"
gluster_volume+=${array[0]}':/data/brick1/gv0 '
done
workers=`echo“${WORKER\u HOST\u IP}”sed“s/,$/”`
如果s=','
对于${workers}中的worker;做
如果s='-'读取-r-a数组您可以尝试eval
(如果砖块列表或字符串来自外部不受信任的源,请小心)
#/bin/bash
set-o xtrace
gluster_volume=“a.example.com:/data/brick1/gv0 b.example.com:/data/brick1/gv0”
eval“gluster卷创建gv0复制副本2${gluster_卷}force”
您试过看这个吗?另一个选项可能是使用eval命令。。。首先,只需将字符串压缩成整个命令。我怀疑您使用的不是bash
,而是zsh
。将此添加到脚本中,并将其输出添加到问题中:echo“$BASH\u VERSION”
。你是如何开始你的脚本的?@TinkerTenorSoftwareGuy Thank eval为我工作。这IFS=',
解释了这一点。您可以在循环后将IFS
重置回正常状态(有几种方法可以做到这一点,但都不完美),但我会考虑使用更好的方法来拆分工作人员。最好的方法取决于WORKER\u HOST\u IP
变量的确切格式。