Вывод строковой переменной показывает странную одинарную кавычку в Bash - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующие скрипты

#!/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_volume, которая не может прочитать полную строку и просто рассматривает a.example.com:/data/brick1/gv0 b.example.com (так что похоже, что команда gluster не может ее проанализировать) .

Затем я запускаю этот сценарий с трассировкой и обнаружил, что команда похожа на

gluster volume create gv0 replica 2 'a.example.com:/data/brick1/gv0 b.example.com:/data/brick1/gv0' force

, поэтому сценарий добавляет одинарные кавычки, которые создают проблему. У меня создалось впечатление, что это из-за set -o xtrace одинарные кавычки не являются частью значения, а являются частью отображаемой командной строки. Но это неправда. если я запускаю указанную выше команду в командной строке, она дает ту же ошибку, и при удалении кавычек она работает.

Как я могу изменить свой скрипт, чтобы он не добавлял кавычки? (Я попытался удалить цитату с помощью sed, но не работал, что-то происходит во время выполнения).

Мне нужно gluster_volume с динамическими c значениями.

Update1:

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
...