如何在find exec中从shell中回显单引号

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

我正在尝试自动执行以下过程:

  1. 在当前目录中查找某些文件;

  2. 为每个文件名在文本文件后添加一行,其中文件名以字符串“ file”开头,并用单引号引起来。

实际上,这是任务的简化版本:我搜索的文件是视频文件,并且ffmpeg在尝试将其名称写入文本文件之前会对它们进行一些处理。文本文件的目的是稍后连接输出文件。但是,视频部分效果很好,我只关注单引号的打印(在屏幕或文件上),这给我带来了麻烦。如果我尝试这样做:

      find . -iname "*" -exec sh -c 'echo "file ""$0"' {} \;

我得到了预期的结果:

       file a1.mp4
       file a2.mp4
       [...]

我现在在文件名$ 0之前添加一个单引号;在双引号或单引号之间,是否转义(如果转义,我也尝试过不加引号),在美元符号后的引号之间,但我得到的只是符号“>”,然后是闪烁的光标,等待更多输入。 >

我已尝试将单引号插入为:“ \'”,“ \”,\',$''',$'\'',$“ \'”;我把它放在字符串“ file”中,带或不带单引号或双引号。我在exec中设置了变量v =“ file”“ \'”“ $ 0”,并在双引号之间回显了it

。我所有的尝试都失败了。理解为什么会很好。也许这里有一些要学习的东西...谢谢您的建议。

______________替代方法_______________

我找到了一种解决方法。我编写一个bash文件,而不是从终端发出单个命令。在查找行之前,我导出变量SQ =“'”。然后我的查找行变为:

    find . -maxdepth 1 -iname "*" -exec sh -c 'echo "file ""$SQ""$(basename -- "$0")""$SQ"' {} \;

并且有效。也许对导出变量中出现的单引号的处理方式与在shell中的字符串或局部变量中出现的单引号处理方式不同?

我正在尝试自动执行以下过程:在当前目录中查找某些文件;为每个文件名在文本文件后添加一行,其中文件名前面带有字符串“ file”,并且是...

bash shell exec single-quotes
1个回答
0
投票

使用printf代替echo


0
投票

这行不做同样的事情吗?

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