Arrays BASH会自动向字符串变量添加单引号
我试图编写一个脚本,在CSV字符串变量上执行自定义命令。问题是,当我从另一个变量(在本例中是从数组)定义字符串变量时,bash函数将元素括在单引号中,并且命令(anothermycommand)正在中断。如果手动使用值定义字符串变量,则该变量不包含该变量,并且自定义命令(anothermycommand)在传递给该命令时工作正常Arrays BASH会自动向字符串变量添加单引号,arrays,regex,linux,string,bash,Arrays,Regex,Linux,String,Bash,我试图编写一个脚本,在CSV字符串变量上执行自定义命令。问题是,当我从另一个变量(在本例中是从数组)定义字符串变量时,bash函数将元素括在单引号中,并且命令(anothermycommand)正在中断。如果手动使用值定义字符串变量,则该变量不包含该变量,并且自定义命令(anothermycommand)在传递给该命令时工作正常 function myfunction { declare -a ARR=($(mycommand $2 | grep "Server:" | awk '{p
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}
如果我对${ARR[@]}值使用变量赋值(line2),则命令将中断,因为${CSV}包含在单引号中。如果我使用直接赋值(第4行),命令工作正常。我认为这与数组赋值有关,从第2行开始,元素用单引号括起来
对于第3行和第7行bash-x调试
+ echo 'SERVER-123' 'SERVER-432'
+ anothermycommand -t 'SERVER-123,SERVER-432'
+ echo SERVER-123 SERVER-432
+ anothermycommand -t SERVER-123,SERVER-432
对于第5行和第7行bash-x调试
+ echo 'SERVER-123' 'SERVER-432'
+ anothermycommand -t 'SERVER-123,SERVER-432'
+ echo SERVER-123 SERVER-432
+ anothermycommand -t SERVER-123,SERVER-432
mycommand$2 | grep”服务器的输出:“| awk'{print$2}'
SERVER-123
SERVER-432
Bash信息
$ 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
如何做到这一点?您是否尝试过使用该工具检查代码?它将分析你的代码并给你一些建议。与您的问题相关,它指向这个问题,例如:如果您将
mycommand$2 | grep”服务器:“| awk'{print$2}'
放在myfunction
的开头,它将打印什么?我尝试了mapfile-t数组<请添加mycommand$2 | grep”服务器的输出:“| awk'{print$2}”“
回答您的问题。您看到的输出就是-x
的工作原理;单引号不是值的一部分,只是显示的命令行的一部分。您是否尝试过使用该工具检查代码?它将分析你的代码并给你一些建议。与您的问题相关,它指向这个问题,例如:如果您将mycommand$2 | grep”服务器:“| awk'{print$2}'
放在myfunction
的开头,它将打印什么?我尝试了mapfile-t数组<请添加mycommand$2 | grep”服务器的输出:“| awk'{print$2}”“
回答您的问题。您看到的输出就是-x
的工作原理;单引号不是值的一部分,只是显示的命令行的一部分。