Конкатенация пробелов в Bash - PullRequest
6 голосов
/ 08 октября 2011

Проблема проста.

for i in `seq $begin $progress_length` ; do
  progress_bar=$progress_bar'#'
done

for i in `seq $middle $end` ; do
  empty_space=$empty_space' '
done

Мне нужно empty_space для позиционирования контента после индикатора выполнения.Я ожидал, что это будет строка из x пробелов.Но, наконец, строка пуста.Как я могу создать строку из x пробелов?

Ответы [ 3 ]

8 голосов
/ 08 октября 2011

Проблема может быть в том, что $empty_space имеет только пробелы. Затем, чтобы вывести их, вы должны заключить их в двойные кавычки:

echo "${empty_space}some_other_thing"

Вы можете попробовать более интересный вывод с помощью printf, например, чтобы получить несколько пробелов. Например, написать 20 пробелов:

v=`printf '%20s' ' '`
1 голос
/ 08 октября 2011

Строки могут быть созданы с помощью подстановки параметров. Подстановка $ {str: offset: length} возвращает подстроку str:

space80='                                                                                '
hash80='################################################################################'

progress_bar=${hash80:0:$progress_length-$begin+1}
empty_space=${space80:0:$end-$middle+1}

echo -n "$empty_space$progress_bar"
0 голосов
/ 16 ноября 2017

Я понимаю вашу проблему, поскольку у меня была точно такая же проблема.

Мое решение состояло в том, чтобы объединить временный символ вместо пробела, скажем, например, , а затем, в конце, заменить все ихвхождения с sed через пробел:

echo $myString | sed 's/☼/ /g'

Надеюсь, это поможет вам!

...