10

У меня есть следующий скрипт:

#!/bin/bash
function consoleWriteLine() {
  echo $* >&2
}

consoleWriteLine "    indented by 4 spaces"

Когда я запускаю его, я получаю следующий вывод:

$ ./test.sh
indented by 4 spaces

Куда делись мои 4 пробела? И как мне их вернуть?

2 ответа2

22

Просто процитируйте echo в вашей функции:

function consoleWriteLine() {
  echo "$*" >&2
}

echo просто замечает несколько аргументов, разделенных пробелом, и выводит их через один пробел. Увидеть:

$ echo a b c
a b c
$ echo a b             c
a b c
$ echo "a b             c"
a b             c

В последнем примере строка a b c представляет собой один единственный аргумент и echo как есть.

4

У меня была эта проблема,

Согласно этому блогу, вам нужно изменить IFS, так как по умолчанию он содержит пробелы и поэтому видит "xxx yyy zzzz" как 3 строки с пробелами между ними.

IFS='\n'

до того, как команда это исправит, и сбросьте IFS, чтобы удалить изменения

unset IFS

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .