Зачем нужен этот слеш? - PullRequest
       4

Зачем нужен этот слеш?

3 голосов
/ 26 февраля 2012

Я создал скрипт 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 есть двойное значение \\. (Я отметил это ^^ в закомментированной строке, но вам, вероятно, потребуется прокрутить →) Зачем мне здесь две обратные косые черты? Мне нужен один, чтобы предотвратить попытку расширения оболочки $1, но в остальном мы работаем только с одним набором одинарных кавычек, который не должен мешать количеству слешей. Тем не менее, только с одним обратным слешем выполняется awk { print }, что не правильно.

Почему \\?

Ответы [ 3 ]

3 голосов
/ 26 февраля 2012

Зачем мне здесь две обратные косые черты?Мне нужен один, чтобы предотвратить попытки оболочки увеличить $ 1, но в остальном мы работаем только с одним набором одинарных кавычек, который не должен путаться с количеством слешей.

Здесь на самом деле есть две оболочки, которые выполняют все обычные переменные / пути / подстановки / расширения: одна -

bash -c

, другая - оператор обратной черты:

`command`

Вам нужно еще одну обратную реакциюпредотвратить расширение $1.

0 голосов
/ 26 февраля 2012

Вы хотите запустить

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 ' {}
0 голосов
/ 26 февраля 2012

Двойная обратная косая черта гарантирует, что одна обратная косая черта будет частью напечатанного, другими словами, если $1 содержит значение "xyz", сценарий напечатает \xyz

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...