0

我有一些 bash 数组arr_a,我想获得一个数组arr_b,其元素是转义arr_a.

因此,如果

arr_a=("foo\"" "bar")

然后arr_a[0]包含foo"arr_a[1]包含bar;我想arr_b[0]包含foo\"arr_b[1]包含bar.

我知道我可以用printf %q "$the_string". 问题是,如果我在函数或子shell 中执行此操作,我会通过将转义字符串打印到函数的输出流来“丢失”转义。这样做的正确方法是什么?

4

1 回答 1

5

然后 arr_a[0] 包含 foo" 并且 arr_a[1] 包含 bar;我希望 arr_b[0] 包含 foo" 并且 arr_b[1] 包含 bar。
这样做的正确方法是什么?

将转义的数组元素打印为零分隔元素的流,然后将该流加载到数组中。

arr_a=("foo\"" "bar")
readarray -t -d '' arr_b < <(printf "%q\0" "${arr_a[@]}")
echo arr_b[0]="${arr_b[0]}"
echo arr_b[1]="${arr_b[1]}"

会输出:

arr_b[0]=foo\"
arr_b[1]=bar
于 2020-09-07T22:52:19.483 回答