Любой может объяснить мне ip = "$ {ip: - $ {default_ip}} - PullRequest
0 голосов
/ 21 сентября 2019

Мне нужна помощь от вас, ребята, чтобы понять этот черный код.У меня проблема с последней строкой.

спасибо

    default_ip=$(hostname -I)   //display localhost ip?
    printf Put your local IP    //print statement
    read ip                     //save input to $ip
    ip="${ip:-${default_ip}}"   //not sure what is this, can you help?

спасибо

1 Ответ

1 голос
/ 21 сентября 2019

Первое: // не является маркером комментария в синтаксисе оболочки;используйте #.Пожалуйста, будьте очень осторожны при попытке использовать синтаксис другого языка в оболочке, так как он часто отличается. Здесь - пример, в котором эта точная ошибка привела к удалению сервера.

Теперь к сценарию:

default_ip=$(hostname -I)

hostname -I печатает все IP-адреса длякомпьютер (разделенный пробелами).$() запускает содержимое как команду и записывает этот вывод.Часть default_ip= присваивает этот вывод переменной default_ip.hostname -I печатает все IP-адреса компьютера (разделенные пробелами), поэтому для default_ip установлено значение.

printf Put your local IP

Это не работает правильно.Должны ли быть кавычки вокруг Put your local IP части?В любом случае, printf печатает вещи, но это довольно сложно использовать правильно, поэтому я просто уклонюсь от этой части вопроса.

read ip

Считывает что-то из стандартного ввода (терминал, по умолчанию)и сохраняет ее в переменной ip.

ip="${ip:-${default_ip}}"

Использует переменную default_ip в качестве значения по умолчанию для переменной ip.Синтаксис ${thing1:-thing2} пытается получить значение переменной thing1, но если она не определена как переменная или определена как пустая строка, вместо нее используется строка thing2.В этом случае thing2 - это ${default_ip}, который получает значение переменной default_ip.

По сути, это означает, что если пользователь просто нажимает клавишу возврата вместо ввода IP-адреса, он используетвывод вместо hostname -I.

...