Функция, которую вы показываете, напечатает первый аргумент дважды, один раз с добавлением новой строки и без новой строки в конце второго вывода.
. в интерактивной оболочке Bash вы получите что-то вроде этого
user@foo /tmp$ check_host foo
foo
foouser@foo /tmp$
Вывод изprintf
— это здесь, просто не на отдельной строке.
Разница между echo
и printf
заключается в том, что echo
печатает новую строку в конце, даже если вы этого не запрашиваете (вы можете предотвратить это в Bash, используяecho -n
)и printf
больше похожа на функцию printf()
в C, поскольку выводит только то, что вы запрашиваете. Вам нужно будет явно использовать \n
в строке формата printf
, чтобы получить новую строку.
Обратите внимание, что, как правило, эти переменные и подстановку команд следует заключать в кавычки, чтобы предотвратить проблемы с разделением слов. Это, вероятно, не проблема с именем хоста, но если у вас есть значения с пробелами, вам это понадобится.
Так:
check_host() {
echo "$1"
printf "%s\n" "$1"
}
check_host "$(hostname)"
Печать произвольных данных с помощью printf
также должна выполняться через спецификатор формата %s
, как указано выше. В противном случае любые знаки %
в данных интерпретировались бы как printf
.
Также см.:Почему printf лучше, чем echo?
Эта реализация scrypt
соответствует вашим требованиям, см.https://github.com/jkalbhenn/scrypt
scrypt-kdf [options...] password [salt N r p size salt-size]
string string integer integer integer integer integer]
options
-b|--base91-input password and salt arguments are base91 encoded
-c|--check hash test if hash is derived from a password
-h|--help display this text and exit
-p|--crypt use unix crypt format
-v|--version output version information and exit