Esc*_*her 5 awk shell-script quoting
这个问题有足够的复杂层,使简单的转义字符对我来说很困难。我有一个 bash 脚本,在很大程度上,它有一个嵌入式 awk 脚本,它读取由分号分隔的文件。在此文本文件中,其中一个字段是某些 JPEG 的目录路径。我想将 JPEG 复制到其他地方,但原始目录路径中有空格(并且可能有其他可能造成损坏的字符串)。我不能用单引号引用有问题的目录,因为这会停止 awk 解释器,而双引号将它变成 awk 中的文字字符串。
我正在使用gawk 4.1.1。这是我要完成的一些 awk 代码:
imageDirectory = $1;
cpJpegVariable="cp -r " imageDirectory " assets";
#screws up if imageDirectory has spaces and other naughty characters
system(cpJpegVariable);
Run Code Online (Sandbox Code Playgroud)
您可以使用:
awk '...
cpJpegVariable="cp -r '\''" imageDirectory "'\'' assets";
...'
Run Code Online (Sandbox Code Playgroud)
(请注意,'不需要转义 for awk,但您需要转义'\''外壳)。所以当awk扩展 variable 时cpJpegVariable,它看起来像:
cp -r 'file_contain space' assets
Run Code Online (Sandbox Code Playgroud)
有了这个,您可以避免所有特殊字符的问题,除了'它自己。如果imageDirectory可能包含单引号字符,您可以使用gsub(). 例子:
awk '{gsub("'\''","'\''\"'\''\"",imageDirectory)}1'
Run Code Online (Sandbox Code Playgroud)