Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux 如何在Bash中扩展数组,向元素添加双引号?_Linux_Bash_Function_Shell_Variable Substitution - Fatal编程技术网

Linux 如何在Bash中扩展数组,向元素添加双引号?

Linux 如何在Bash中扩展数组,向元素添加双引号?,linux,bash,function,shell,variable-substitution,Linux,Bash,Function,Shell,Variable Substitution,我希望将数组传递给函数,并将数组中的值用作命令参数,如下所示: 命令可以接收N个参数,例如:param1param2oneparam1a2b3conotherparam my_func(){ 命令param1 param2$1$2$3 } my_arr=(“1A”“2B”“3C”) my_func“oneparam”${my_arr[@]}“onotherparam” 但我并没有将其作为函数中的单个参数接收,因此$1只是1a,而不是“1a”“2b”“3c” 那么我想我可以做到这一点: my_f

我希望将数组传递给函数,并将数组中的值用作命令参数,如下所示:

命令可以接收N个参数,例如:
param1
param2
oneparam
1a
2b
3c
onotherparam

my_func(){
命令param1 param2$1$2$3
}
my_arr=(“1A”“2B”“3C”)
my_func“oneparam”${my_arr[@]}“onotherparam”
但我并没有将其作为函数中的单个参数接收,因此
$1
只是
1a
,而不是
“1a”“2b”“3c”

那么我想我可以做到这一点:

my_func(){
命令param1 param2$1$2$3
}
my_arr=(“1A”“2B”“3C”)
参数=${my_arr[@]/%/\“}1 a“2 b”3 c”
my_func“oneparam”$params“onotherparam”
但它只将引号放在每个元素的末尾


如何在每个数组元素的两侧都加引号?

要使用正确的引号保留参数,您必须进行两项更改:引用数组扩展并使用函数中的所有参数,而不仅仅是
$1

my_func(){
命令par1 par2“$@”
}
my_arr=(“1A”“2B”“3C”)
my_func“${my_arr[@]}”

如果OP真的想在3个数组元素周围保留一组双引号,那么一个想法是在填充数组时显式添加它们,例如:

my_arr=('"1 a"' '"2 b"' '"3 c"')
使用稍加修改的OPs功能定义:

my_func() {
    echo command param1 param2 $1 $2 $3
}
并打开调试:

set -xv
调用函数时,我们会看到以下内容(请注意数组引用周围带引号和不带引号的调用):


如果
命令
获取三个参数,
par1
par2
1A2B3C
,或5,如
par1
par2
1A
2B
3C
?@BenjaminW。总共有5个参数。不清楚您在这里试图做什么。访问shellcheck.net将指出许多引用问题。但是,您的函数不清楚您期望的是
my\u arr
的所有元素还是其中的一个。如前所述,您将只得到一个单词分割参数。什么是
par1
par2
$ my_func ${my_arr[@]}
my_func ${my_arr[@]}
+ my_func '"1' 'a"' '"2' 'b"' '"3' 'c"'
+ echo param1 param2 '"1' 'a"' '"2'
param1 param2 "1 a" "2

# and

$ my_func "${my_arr[@]}"
my_func "${my_arr[@]}"
+ my_func '"1 a"' '"2 b"' '"3 c"'
+ echo param1 param2 '"1' 'a"' '"2' 'b"' '"3' 'c"'
param1 param2 "1 a" "2 b" "3 c"