У меня есть следующий скрипт:
#!/bin/bash
function consoleWriteLine() {
echo $* >&2
}
consoleWriteLine " indented by 4 spaces"
Когда я запускаю его, я получаю следующий вывод:
$ ./test.sh
indented by 4 spaces
Куда делись мои 4 пробела? И как мне их вернуть?
consoleWriteLine
. Во второй раз, когда этоecho
d, пробел должен быть снова сохранен дополнительными кавычками. Я бы никогда не догадался, что вы можете поместить цитаты вокруг$*
.$*
, этот вариант$@
был специально создан для того, чтобы раскрываться в отдельных словах в кавычках:"$@"
может быть несколько аргументов,"$*"
всегда только один.echo
это одна из немногих команд, где это не имеет значения.У меня была эта проблема,
Согласно этому блогу, вам нужно изменить IFS, так как по умолчанию он содержит пробелы и видит «xxx yyy zzzz» как 3 строки с пробелами между ними.
IFS='\n'
до того, как команда это исправит, и сбросьте IFS, чтобы удалить изменения
unset IFS
источник