Конечный пробел в командах zsh - PullRequest
0 голосов
/ 21 сентября 2019

Я пишу zsh-скрипт, который фиксирует имя хоста из файла README и проверяет его наличие в сети, проверяя его.Вот мой код:

HOSTNAME=$(cat README 2>/dev/null | grep -oP "^Host(name)*:[\s]+\K(.*)")
ping -w 5 -c 1 $HOSTNAME >/dev/null 2>&1
if [ $? != 0 ]; then
    # error
else
    # all good
fi

Я заметил, что если строка, содержащая имя хоста в README, имеет завершающий пробел, ping не работает.Например, строка может выглядеть следующим образом, где я представляю пробел с символом _.

Hostname:____bobscomputer_

Разве zsh не избавляется от лишних пробелов в своих командах, как bash?

1 Ответ

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

Вы думаете о разбиении слов переменных без кавычек, что Bash делает неявно, но Zsh не .Например:

$ cat test.sh
var="foo bar"
printf '%s\n' $var
$ bash test.sh
foo
bar
$ zsh test.sh
foo bar

Если вы хотите разделить слова в Zsh, используйте $=var.

Кстати, вот команда awk, которая проще и позволяет избежать проблемы (если имена хостов могут 'не должно содержать пробелов):

HOSTNAME=$(awk '/^Host(name)?:/ {print $2}' README)
...