微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何转义bash数组中的所有字符串?

如何解决如何转义bash数组中的所有字符串?

我有一些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中执行此操作,则通过将转义的字符串打印到函数输出流中来“丢失”转义。什么是正确的方法

解决方法

然后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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。