ein*_*ica 0 arrays bash escaping
我有一些 bash 数组arr_a,我想获得一个数组,arr_b其元素是对 .bash 的相应元素进行转义的结果arr_a。
因此如果
arr_a=("foo\"" "bar")
Run Code Online (Sandbox Code Playgroud)
然后arr_a[0]包含foo"和arr_a[1]包含bar;我想arr_b[0]包含foo\"和arr_b[1]包含bar.
我知道我可以用printf %q "$the_string". 问题是,如果我在函数或子shell 或其他东西中执行此操作,我会通过将转义字符串打印到函数的输出流来“丢失”转义。这样做的正确方法是什么?
然后 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]}"
Run Code Online (Sandbox Code Playgroud)
会输出:
arr_b[0]=foo\"
arr_b[1]=bar
Run Code Online (Sandbox Code Playgroud)