如何在 Bash 中扩展数组,为元素添加双引号?
How to expand array in Bash adding double quotes to elements?
我想将数组传递给函数并将数组中的值用作命令参数,如下所示:
command
可以接收N个参数,例子:param1
param2
oneparam
1 a
2 b
3 c
onotherparam
my_func() {
command param1 param2
}
my_arr=("1 a" "2 b" "3 c")
my_func "oneparam" ${my_arr[@]} "onotherparam"
但我并没有将其全部作为函数中的单个参数接收,因此 </code> 只是 <code>1 a
而不是 "1 a" "2 b" "3 c"
那么我虽然可以这样做:
my_func() {
command param1 param2
}
my_arr=("1 a" "2 b" "3 c")
params=${my_arr[@]/%/\"} # 1 a" 2 b" 3 c"
my_func "oneparam" "$params" "onotherparam"
但它只将引号放在每个元素的末尾。
如何在每个数组元素的两边加上引号?
要使用正确的引用保留参数,您必须进行两项更改:引用数组扩展并使用函数中的所有参数,而不仅仅是 </code>.</p>
<pre><code>my_func() {
command par1 par2 "$@"
}
my_arr=("1 a" "2 b" "3 c")
my_func "${my_arr[@]}"
如果 OP 真的想在 3 个数组元素周围维护一组双引号,那么一个想法是在填充数组时显式添加它们,例如:
my_arr=('"1 a"' '"2 b"' '"3 c"')
使用稍微修改过的 OPs 函数定义:
my_func() {
echo command param1 param2
}
并开启调试:
set -xv
我们在调用函数时看到以下内容(注意数组引用周围有和没有引号的调用):
$ 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"
我想将数组传递给函数并将数组中的值用作命令参数,如下所示:
command
可以接收N个参数,例子:param1
param2
oneparam
1 a
2 b
3 c
onotherparam
my_func() {
command param1 param2
}
my_arr=("1 a" "2 b" "3 c")
my_func "oneparam" ${my_arr[@]} "onotherparam"
但我并没有将其全部作为函数中的单个参数接收,因此 </code> 只是 <code>1 a
而不是 "1 a" "2 b" "3 c"
那么我虽然可以这样做:
my_func() {
command param1 param2
}
my_arr=("1 a" "2 b" "3 c")
params=${my_arr[@]/%/\"} # 1 a" 2 b" 3 c"
my_func "oneparam" "$params" "onotherparam"
但它只将引号放在每个元素的末尾。
如何在每个数组元素的两边加上引号?
要使用正确的引用保留参数,您必须进行两项更改:引用数组扩展并使用函数中的所有参数,而不仅仅是 </code>.</p>
<pre><code>my_func() {
command par1 par2 "$@"
}
my_arr=("1 a" "2 b" "3 c")
my_func "${my_arr[@]}"
如果 OP 真的想在 3 个数组元素周围维护一组双引号,那么一个想法是在填充数组时显式添加它们,例如:
my_arr=('"1 a"' '"2 b"' '"3 c"')
使用稍微修改过的 OPs 函数定义:
my_func() {
echo command param1 param2
}
并开启调试:
set -xv
我们在调用函数时看到以下内容(注意数组引用周围有和没有引号的调用):
$ 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"