【问题标题】:How to use filenames having special characters with awk '{system("stat " $0)}'如何在 awk \'{system(\"stat \" $0)}\' 中使用具有特殊字符的文件名
【发布时间】:2022-11-03 17:47:25
【问题描述】:

例如,list.txt 是这样的:

abc.txt
-abc.txt

我无法得到正确的答案 awk '{system("stat " $0)}' list.txtawk '{system("stat \"" $0 "\"")}' list.txt

我怎么能告诉 awk 系统在文件名周围添加引号?

awk '{system("stat " $0)}' list.txt 肯定行不通。 但是为什么awk '{system("stat \"" $0 "\"")}' list.txt 也不会呢?它的行为就像前者一样。 但是有了awk '{system("stat \\\"" $0 "\\\"")}' list.txt,我会得到这个:

stat: cannot stat '"abc.txt"': No such file or directory

【问题讨论】:

  • awk '{system("stat \"" $0 "\"")}' 在 bash 和 csh 中都适用于我。你用的是什么外壳?

标签: awk escaping system


【解决方案1】:

首先,如果你想得到stat 命令的输出,system() 不是正确的方法。它只返回返回码而不是执行输出。

您可以在 awk 中尝试stat file | getline myOutputmyOutput 变量将保存输出。

关于您的文件-abc.txt。引用它是不够的。您可以尝试在终端stat "-abc.txt" 中执行它,它不会起作用,因为文件名以- 开头。您需要添加--stat -- "-abc.txt" 因此,您可能需要检查文件名是否以- 开头并在您的awk 代码中添加--

最后,关于quote,你可以声明一个awk变量,比如awk -v q='"' '{....,然后,当你想使用"时,你使用q,这样你的代码可能更容易阅读。例如,print "stat " q "myName" q

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2022-10-05
    • 2014-04-17
    • 2015-08-02
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多