$@
расширяется для разделения слов (тогда как $*
расширяется до отдельного слова), как объяснено в bash
руководство. Таким образом, когда Вы пишете
zenity --text="$@"
это расширяется до
zenity --text="$1" "$2" "$3"
Однако окружите переменные присвоения, не подвергаются разделению слова. Обратите внимание, что поле / разделение слова опущено в списке расширений для переменных присвоений в bash
руководство. Это поведение согласовывается со спецификацией POSIX. Так, когда Вы пишете
text="$@"
переменная text
получает все позиционные параметры как отдельное слово, эквивалентное тому, если Вы записали text="$*"
. Действительно, это - причина, двойные кавычки являются часто ненужными в переменных присвоениях. Оба
text=$@
и
text=$*
совершенно безопасны.
Так,
text=$@
zenity --option="$text"
расширяется "$text"
к отдельному слову, которое является, почему это работает. Обратите внимание что --option="$@"
просто нормальный аргумент команде zenity
, и не присвоение переменной оболочки, которое является, почему разделение слова происходит здесь, но не в text=$@
.
Если Вы просто хотите направить различные порты на 2.2.2.2 к различным виртуальным машинам, можно сделать это с iptables. Дополнительную информацию см. в руководстве CentOS, включая то, как сделать правила персистентными (iptables
только изменяет настройки до следующей перезагрузки). К прямому входящему TCP запрашивает на порте 13080 к 10.0.0.1 на порте 80:
iptables -t nat -A PREROUTING -p tcp --dport 13080 -j DNAT --to 10.0.0.1:80
Если Вы хотите выбрать VM в зависимости от имени хоста в Запросе HTTP, Вам нужен сервер HTTP для действия как диспетчер. Можно использовать Apache, но для такой быстрой, простой задачи, Nginx популярен.