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"