Эта проблема почти аналогична
Я пытаюсь написать скрипт, который выполняет пользовательскую команду для строковой переменной CSV. Проблема в том, что когда я определяю строковую переменную из другой переменной (в данном случае из массива), функция bash заключает элементы в одинарные кавычки, а команда (anothermycommand) прерывается. И если вручную определить строковую переменную со значением, она не будет содержать переменную, и пользовательская команда (anothermycommand) будет работать нормально при ее передаче в команду.
function myfunction {
declare -a ARR=($(mycommand $2 | grep "Server:" | awk '{print $2}')) #variable assignment
echo ${ARR[@]}
declare -a ARR=('SERVER-123' 'SERVER-432') #static assignment - Values are same to above varibale assignment
echo ${ARR[@]}
declare CSV=$(echo ${ARR[@]}| tr ' ' ',')
anothermycommand -t ${CSV}
Если я использую назначение переменной (строка 2) для значений $ {ARR [@]} команда прерывается, потому что $ {CSV} заключен в одинарные кавычки. И если я использую прямое назначение (line4), команда работает нормально. Я думаю, что это связано с присвоениями массива, из строки 2 элементы заключены в одинарные кавычки.
Для строки 3 и 7 bash -x debug
+ echo 'SERVER-123' 'SERVER-432'
+ anothermycommand -t 'SERVER-123,SERVER-432'
Для строки 5 и 7 bash -x debug
+ echo SERVER-123 SERVER-432
+ anothermycommand -t SERVER-123,SERVER-432
Вывод mycommand $2 | grep "Server:" | awk '{print $2}'
SERVER-123
SERVER-432
Bash info
$ echo $BASH_VERSION $BASHOPTS
4.3.48(1)-release checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:interactive_comments:login_shell:progcomp:promptvars:sourcepath
Как сделать эту работу?