Другой способ:
awk -F' ' 'NF=1' /etc/services |tail -n 10
или
awk -F' ' '{print $1}' /etc/services |tail -n 10
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")