У меня было это, это было stty
в .kshrc. Помните, что .kshrc получен на всех ksh сценариях, интерактивных и не интерактивный. Если Вы запустите скрипт, то stty будет все еще стрелять, попытаться работать над stdin, который является файлом (не tty теперь) и сбой с ошибкой.
Иначе должен был бы использовать IFS, встроенный метод оболочки для разделения строк на поля.
OLDIFS=$IFS
IFS=':'
set -f
for host in $hostlist; do
set +f
echo "$host"
done
set +f
IFS=$OLDIFS
set -f
выключает поколение имени файла (globbing): без него, подстановочные знаки *?\[
был бы расширен в каждом слове.
Я думаю, что простое решение состоит в том, чтобы только использовать удар builtins:
#!/bin/bash
hostlist=${1//:/ } # this will replace all : with a space
for host in $hostlist ; do
echo ${host}
done
Иначе (еще более простой, чем Ваше awk решение) должен использовать сокращение, хотя это, вероятно, зависит от сокращения GNU.
#!/bin/bash
hostlist=$(echo $1 | cut -d : --output-delimiter=" " -f 1-)
for host in $hostlist ; do
echo ${host}
done