@maolo

Bash скрипт: как вставить в составную команду внешнюю переменную?

Есть следующий скрипт:
#!/bin/bash
find ./ -type f -name '*.png' | xargs -P 8 -I {} sh -c 'cwebp -q 75 $1 -o "${1%.png}.webp"' _ {} \;

В таком виде работает нормально, но если я пробую добавить параметр при вызове скрипта (примерно так: scriptname 85), то все ломается:
#!/bin/bash
quality=${1:-75}
find ./ -type f -name '*.png' | xargs -P 8 -I {} sh -c 'cwebp -q $quality $1 -o "${1%.png}.webp"' _ {} \;
'                                                                ^^^^^^^^                  '

Как можно реорганизовать команду, чтобы внешний параметр вставлялся?
  • Вопрос задан
  • 458 просмотров
Решения вопроса 1
@maolo Автор вопроса
Прошу прощения, что сам и отвечаю, но помучившись еще один часок, благодаря интернету, все же решил проблемку - может не слишком элегантно, но главное, что работает:
#!/bin/bash
quality=${1:-75}
part1='cwebp -q '
part2=' $1 -o "${1%.png}.webp"'
cmd=$part1$quality$part2
find ./ -type f -name '*.png' | xargs -P 8 -I {} sh -c "$cmd" _ {} \;

И вызвать скрипт можно или с параметром, или без - по-умолчанию, качество выставлено 75.
Например, создадим алиас "webp-convert" для скрипта, тогда вызов будет выглядеть будет так:
$ webp-convert # качество 75
$ webp-convert 90 # качество 90
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
двойные кавычки - в одинарных не интепол
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы