printf -v — недопустимая опция в конвейере Bitbucket. И вопрос про <<

Другой способ:

awk -F' ' 'NF=1' /etc/services |tail -n 10

или

awk -F' ' '{print $1}' /etc/services |tail -n 10

1
08.07.2020, 08:31
1 ответ
printf -v BITBUCKET_COMMIT_str %q "$BITBUCKET_COMMIT"
echo "commit string $BITBUCKET_COMMIT_str"

deployment.sh: 28: printf: Illegal option -v

Похоже на сообщение об ошибке от Dash, Debian /bin/sh. Это тот момент, когда возникнет вопрос, правильный ли хэш-банг в начале скрипта, но вы уже упомянули об этом в комментариях.

В качестве обходного пути для -vможно использовать подстановку команд, var=$(printf whatever), но тогда вы столкнетесь с проблемой %q, так как Dash не поддерживает и это, и его довольно сложно заменить, так как ${var/pattern/replacement}расширение также не поддерживается.

Но посмотрите на следующую строку. Вы используете эту переменную BITBUCKET_COMMIT_strдля печати пользователю. Это не обязательно требует кавычек, действительных для ввода оболочки, что и делает %q. (И %qдаже не дает красиво -выглядящего вывода, он отдает приоритет использованию обратной косой черты, а не одинарных кавычек. )Итак, если это единственное место, где вы используете переменную, и она не содержит, например. символы новой строки (, если это идентификатор коммита или что-то в этом роде, вероятно, нет ), вы могли бы просто вообще пропустить printfи использовать что-то вроде этого:

echo "commit string '$BITBUCKET_COMMIT'"

Если вам действительно нужен Bash %q, а Bash вообще доступен, очевидным, но очень излишним решением будет вызвать для этого Bash:

quotedvar=$(bash -c 'printf %q "$1"' bash "$var")
2
18.03.2021, 23:21

Теги

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