2015-09-18 2 views
3

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

Is:

printf "$file does not exist\n" 

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

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

Запись shellcheck вики для [SC2059] (https://github.com/koalaman/ shellcheck/wiki/SC2059) (предупреждение, которое запускается здесь) охватывает это. –

+0

Ах, не знал, что существует. Благодарю. – rojomoke

ответ

4

Поскольку в теории 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 

По recommendedation он будет работать нормально:

printf "%s does not exist\n" "$file" 
m%y does not exist 
Смежные вопросы