тире: проанализируйте строку в две переменные

Ваш eth0, кажется, не имеет никакого IP-адреса. Ваш новый модем должен иметь сервер DHCP. Включите его (это уже должно быть), и установите свою плату Ethernet для использования DHCP. Администратор сети в Debian базировался, установки игнорируют карты, если они настроены с помощью /etc/network/interfaces, таким образом, можно использовать любой метод, Вам нравится.

2
26.04.2015, 22:29
2 ответа

В тире каждая команда в трубопроводах выполняется в подсхеме (zsh и AT&T ksh, самая правая команда в трубопроводах не), поэтому переменных X и Y больше не существует, когда ваша команда выполнена.

Просто используйте Расширение параметров, попробуйте:

$ set -- foo:123
$ X=${1%:*}
$ Y=${1#*:}

Пример используется для интерактивной сессии.

Внутри Вашего скрипта Вам не нужен набор -- foo:123.

7
27.01.2020, 21:50

Вы также можете использовать оператор split + glob (оставьте переменную без кавычек) (и который вы использовали без видимой причины в своем вопросе):

IFS=:     # configure the split part to use : as the delimiter
set -f    # disable the glob part
set -- $1 # $1 is split on : and parts are stored in $1, $2...
X=$1 Y=$2

Вы также можете сделать:

printf '%s\n' "$1" | {
  IFS=: read -r X Y
  printf '%s\n' "$X"
}

В dash , как bash (но в отличие от AT&T ksh или zsh ), все части конвейера выполняются в подоболочках (они должны выполняться в разных в любом случае, поскольку они выполняются одновременно). Выше нам нужна часть, которая использует этот $ X , чтобы находиться в той подоболочке, которая считывает вывод printf и устанавливает $ X .

Обратите внимание, что эти два решения ведут себя по-разному, если $ 1 содержит символ новой строки или более одного символа : .

4
27.01.2020, 21:50

Теги

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