Лишний пробел в переменной из-за subshell

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
lgar
Сообщения: 118
ОС: Ubuntu

Лишний пробел в переменной из-за subshell

Сообщение lgar »

Кроме column -t, есть другая возможность избежать лишнего пробела перед значением переменной?

То есть, чтобы сразу было $var='value', а не $var=' пробел value'

Код: Выделить всё

#set -x
file=$1
sort=$2
hosts=$(cat $file | grep $sort | cut -d'.' -f1)
for host in $hosts; do hostlist="$hostlist $host"; done
IFS=$'\t'
echo $hostlist | column -t


++ for host in '$hosts'
++ hostlist='пробелhost13'
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Лишний пробел в переменной из-за subshell

Сообщение SLEDopit »

так вы сами его туда ставите в строке:

Код: Выделить всё

hostlist="$hostlist $host"

если порядок не важен, то делайте так (тогда пробел будет в конце (: ):

Код: Выделить всё

hostlist="$host $hostlist"

ну или после того, как цикл закончился, убирайте пробел:

Код: Выделить всё

hostlist=${hostlist# }  ## убирает с начала
hostlist=${hostlist% }  ## убирает с конца


и, кстати, echo $hostlist (именно вариант без кавычек) пробел в начале проигнорирует.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4463
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Лишний пробел в переменной из-за subshell

Сообщение Rootlexx »

Код: Выделить всё

for host in $hosts; do
  hostlist=${hostlist:+$hostlist }$host;
done

Но вообще-то непонятно, зачем городить такую конструкцию. Если вы хотите получить список узлов в одну строку через пробел, можно просто записать так:

Код: Выделить всё

hosts=$(cat $file | grep $sort | cut -d'.' -f1 | tr \\n \ )
Спасибо сказали: