【问题标题】:Dealing with single quotes in file paths as returned by find处理 find 返回的文件路径中的单引号
【发布时间】:2012-05-05 05:50:26
【问题描述】:

我正在编写一个 bash 脚本,当从目录 B 运行时,它会反映目录 A 在目录 B 中的目录结构。

目前,我这样做如下:

 #!/bin/bash          

 dirify () {
    echo $1
 }
 export -f dirify

 find "../test" -type d -exec bash -c "dirify '{}'" \;

我从目录B 运行这个脚本,而../test 是目录A。 幸运的是,我用来测试的目录包含名称中带有' 的文件夹。当我运行此脚本时,bash 在到达这些目录时会给出以下错误:

> bash: -c: line 0: unexpected EOF while looking for matching `''
> bash: -c: line 1: syntax error: unexpected end of file

(注意第 0 行和第 1 行是指dirify() 函数中的行)

说明此问题的更简化方法如下:

find "../test" -exec bash -c "echo '{}'" \;

此示例产生相同的错误。

无论如何,这是一个问题,因为在生产中,我不能假设文件路径不包含 ' 字符。

这个问题有什么办法吗?

【问题讨论】:

    标签: bash escaping find


    【解决方案1】:

    将其作为参数传递。

    bash -c 'dirify "$1"' dirify {}
    

    【讨论】:

    • 太棒了!谢谢。你能简单解释一下这个语法是如何工作的吗?
    • 通过-c 运行脚本时,bash 接受额外的参数并从$0 开始分配它们。
    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 2012-12-13
    • 2019-10-31
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多