использование 'echo' и 'printf' в вызовах функций bash

Отключение не сработало, потому что логика Debian / etc / X11 / default-display-manager отменяет его.

Чтобы сделать текстовую загрузку по умолчанию под systemd (независимо от того, какой дистрибутив на самом деле):

systemctl set-default multi-user.target

Чтобы вернуться к загрузке с графическим интерфейсом,

systemctl set-default graphical.target

я подтвердил, что они работают на моей Jessie VM и Slashback подтвердил это и на Stretch.

PS: На самом деле вам не нужен X-сервер на вашем компьютере для запуска X-клиентов через ssh. X-сервер нужен только там, где есть дисплей (монитор).

8
27.02.2019, 22:16
1 ответ

Функция, которую вы показываете, напечатает первый аргумент дважды, один раз с добавлением новой строки и без новой строки в конце второго вывода.

. в интерактивной оболочке Bash вы получите что-то вроде этого

user@foo /tmp$ check_host foo
foo
foouser@foo /tmp$ 

Вывод изprintf— это здесь, просто не на отдельной строке.

Разница между echoи printfзаключается в том, что echoпечатает новую строку в конце, даже если вы этого не запрашиваете (вы можете предотвратить это в Bash, используяecho -nprintfбольше похожа на функцию printf()в C, поскольку выводит только то, что вы запрашиваете. Вам нужно будет явно использовать \nв строке формата printf, чтобы получить новую строку.

Обратите внимание, что, как правило, эти переменные и подстановку команд следует заключать в кавычки, чтобы предотвратить проблемы с разделением слов. Это, вероятно, не проблема с именем хоста, но если у вас есть значения с пробелами, вам это понадобится.

Так:

check_host() {
    echo "$1"
    printf "%s\n" "$1"
}
check_host "$(hostname)"

Печать произвольных данных с помощью printfтакже должна выполняться через спецификатор формата %s, как указано выше. В противном случае любые знаки %в данных интерпретировались бы как printf.

Также см.:Почему printf лучше, чем echo?

13
27.01.2020, 20:10

Теги

Похожие вопросы