Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Arrays BASH会自动向字符串变量添加单引号_Arrays_Regex_Linux_String_Bash - Fatal编程技术网

Arrays BASH会自动向字符串变量添加单引号

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

我试图编写一个脚本,在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}
如果我对${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
的工作原理;单引号不是值的一部分,只是显示的命令行的一部分。