Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash中显示奇怪单引号的字符串变量输出_Bash_Shell_Glusterfs - Fatal编程技术网

在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
变量的确切格式。