Цитируйте переменные, иначе пробелы приведут к тому, что они будут разбить на отдельные аргументы.
printf -v serverinfo "Hostname:\t%s\nCPU:\t%s\nDisk:\t%s\nSystem:\t%s\n" "$hostn" "$cpu" "$disk" "$system"
Обычно вам следует все время цитировать переменные, кроме тех случаев, когда вы знаете, что вам нужно, чтобы они были разбиты на слова.
Неважно. Я нашел этот пост:Использование getopts для анализа параметров после аргумента параметра, отличного от -
, что в основном говорит о том, что я могу решить свою проблему, просто поместив shift
после dirname=$1
Что позволяет вводить аргументы как
$ bash file.sh expected_arg -f optional_arg