我创建了一个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 }
得到执行,这是不正确的。
为什么\\
?
不,双反斜杠确保打印变量:在一个或两个反斜杠的情况下,反斜杠实际上是输出。在单个反斜杠的情况下,'$ 1'由'bash'评估 - 这是无意识的,因为它没有值,所以awk得到'{print}',这是错误的。在两个反斜杠的情况下,awk获得'{print $ 1}'和'$ 1'(根据需要)由'awk'评估。 – Thanatos 2012-02-26 11:32:27
感谢您的纠正 - 在回答之前我没有深入了解...... – 2012-02-26 11:39:59