如何正确转义文件名中的单引号?

问题描述 投票:0回答:1

我的文件名称中带有单引号,例如

o'a
。我想在 awk (gawk-5.3.0) 中处理它们: (fd
find
的替代品)。 请不要告诉我有关 fd
-x
选项的信息,我的命令是一个较大命令的片段,我对 awk 解决方案非常感兴趣。

fd . | awk '{ print "name: \047" $0 "\047"; cmd="stat -c \"%U\" " $0 ; cmd | getline result ; print result }'

我收到错误:

name: 'o'a'
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file

如何在 awk 中正确转义名称中的引号?我尝试过

gsub
但到目前为止没有任何效果。

还有带有

$
符号的文件,因此最好的解决方案是针对大多数更糟糕的情况(当然会发生)清理名称!

awk command-line command-line-arguments
1个回答
0
投票

这是因为你正在构建一个看起来像这样的命令字符串

stat -c "%U" o'a

然后将其传递给 shell。

您需要引用文件名。这是一种方法。

cmd = sprintf("stat -c \"%%U\" \"%s\"", $0)

如果文件名包含双引号,你就会遇到麻烦。当您必须将文件名放入字符串中时,没有简单的方法可以解决这个问题。您可能会考虑用 python 或 perl 替换 awk,其中命令可以格式化为列表,并且不需要对文件名进行任何特殊引用。

© www.soinside.com 2019 - 2024. All rights reserved.