Как отобразить результаты с двумя пробелами табуляции, когда есть цикл for

Как отобразить результаты с двумя пробелами табуляции, когда есть цикл for

Я хотел бы создать код для получения следующего результата:

echo -e "\t\tPlease enter your name?"
read name
name="${name,,}"
for i in $(echo "Hello " $name) ; do
    echo ${i^} 
done | sed 's/^/\t\t/;s/$/, here is your order:/'

Если я введу имя, например:mike denver

Вывод:

<here come out the right space of two tabs>Hello, here is your order:
<here come out the right space of two tabs>Mike, here is your order:
<here come out the right space of two tabs>Denver, here is your order:

По сути, он создает правый пробел с левой стороны на основе количества табуляций, которые я поставил ( \t), но он повторяет строку печати для Helloплюса для каждого введенного имени. Я не понял, как поместить команду sed снаружи. Мой ожидаемый результат должен быть таким:

<here come out the right space of two tabs>Hello, Mike Denver here is your order: 

решение1

Вместо того, чтобы использовать forцикл, гораздо проще сделать так:

echo -e "\t\tPlease enter your name?"
read -a name
name="${name}"
echo -e "\t\tHello ${name[@]^}, here is your order:"

Выход:

            Please enter your name?
mike denver
            Hello Mike Denver, here is your order:

Двойные кавычки вокруг аргумента for echoрасширят переменную и выведут все данные сразу в нужном формате.

решение2

Вы можете использовать массив для имени и printf:

read -p $'\t\tPlease enter your name?\n' -a name
name=( "${name[@],,}" )
printf '\t\tHello %s, here is your order:\n' "${name[*]^}"

Связанный контент