为什么需要这种斜线?

时间:2012-02-26 10:32:07

标签: bash awk

我创建了一个bash脚本来缩放树中的所有图像。它是以下内容:

#!/bin/bash

find -path "thumbnails/" -prune -or -iname "*.jpg" -exec \
    bash -c 'convert "$0" -resize 256x256 thumbnails/`sha512sum "$0" | awk "{ print \\$1 }"`.jpg' {} \;
#                                                                                   ^^

在awk命令中,有一个双\\。 (我在注释行上用^^标记了它,但你可能需要滚动→)为什么我在这里需要两个反斜杠?我需要一个来防止shell尝试扩展$1,但除此之外,我们只在一组单引号内工作,这不应该与斜杠的数量相混淆。然而,只有一个反斜杠,awk { print  }被执行,这是不正确的。

为何选择\\

3 个答案:

答案 0 :(得分:3)

  

为什么我需要两个反斜杠?我需要一个来阻止shell尝试扩展$ 1,但是否则,我们只在一组单引号中工作,这不应该与斜杠的数量相混淆。

这里实际上有两个shell可以执行所有常见的变量/路径变换/扩展,一个是

bash -c

另一个是反击操作符:

`command`

您需要再次强烈反对,以防止扩展$1

答案 1 :(得分:0)

您想要运行

convert "$0" -resize 256x256 thumbnails/`sha512sum "$0" | awk "{ print \$1 }"`.jpg {}

通过bash -c为每个文件。因此,当您将命令添加为bash的参数时,请使用单引号''进行包装。在这种情况下,您需要使用一个反斜杠转义反斜杠。那是

bash -c 'convert "$0" -resize 256x256 thumbnails/`sha512sum "$0" | awk "{ print \\$1 }"`.jpg ' {}

答案 2 :(得分:-2)

双反斜杠确保单个反斜杠将成为打印内容的一部分,换句话说,如果$1保持值“xyz”,则脚本将打印\xyz

相关问题