首页 > 解决方案 > 在bash中,我的代码中有重叠的引号,不允许再次包装整个引号

问题描述

我正在写一个小的 bash 脚本,我需要将这部分放在引号中,但我不能这样做,因为它总是有引号之外的部分。

printf '%s\n' {a..z} | awk '{print NR}' |
xargs -I num -n 1 bash -c "printf '%s\n' {a..z} | awk 'NR==num'"

有没有什么办法可以去掉里面的撇号或者把整个块变成引号?

(对不起我的英语不好,如果我只是对此感到愚蠢,那是因为这将是我第一个完整的编码项目)

标签: bash

解决方案


在双引号内,您可以像这样转义其他双引号:

$ echo "a \"b\" c"
a "b" c

因此,你可以

"printf '%s\n' {a..z} | awk '{print NR}' | xargs -I num -n 1 bash -c \"printf '%s\n' {a..z} | awk 'NR==num'\""

但是,这可能不是要走的路。问题是,为什么你需要这个命令在引号中?如果您需要深度嵌套的引号,则可能是您的脚本写得不好(例如,它可能依赖于eval)。通常,您可以改进您的脚本,以便不再需要深度嵌套的引号。


推荐阅读