Переменная с интерполяцией и подстановка в строке формата printf

ShellCheck выдает предупреждение, если вы поместите переменную в printf(1) строка формата. Зачем?

Является:

printf "$file does not exist\n"

уступает в некотором роде:

printf "%s does not exist\n" "$file"

1 ответ

Решение

Потому что в теории file переменная может иметь некоторый символ форматирования, который потерпит неудачу printf, Эти примеры сделают это более понятным:

file='my'
printf "$file does not exist\n"
my does not exist    

file='m%y'
printf "$file does not exist\n"
-bash: printf: `y': invalid format character

По рекомендации все будет работать нормально:

printf "%s does not exist\n" "$file"
m%y does not exist
Другие вопросы по тегам