Первый шаг, оболочка выполняет расширение переменной.Поскольку переменная $d
отсутствует, она заменяется пустой строкой.После замены переменной это выглядит так, как будто вы написали:
printf 'here: %s \n' /home/gsamaras/Bash/libs/goodLib 103
Теперь, почему она печатает here:
дважды?Когда printf
дается больше аргументов, чем спецификаторов формата, он повторяет строку формата, зацикливаясь на дополнительные моменты времени, пока не будут использованы все его аргументы.Поскольку у вас есть один %s
, но два дополнительных аргумента, он повторяется дважды.Это как если бы вы написали:
printf 'here: %s \n' /home/gsamaras/Bash/libs/goodLib
printf 'here: %s \n' 103
Вот почему вы получаете две строки вывода.