Rsync не может удалить удаленный файл, не существующий в локальном

Подстановка команд ( $ (cmd) или `cmd` (также $ {cmd;} в ksh93)) сохраняет стандартный вывод cmd минус завершающие символы новой строки (если этот вывод не содержит байтов NUL в оболочках, отличных от zsh ).

С обратной косой чертой ничего особенного не происходит. Единственные символы, с которыми он может ошибаться, - это символ NUL (и каждый символ после первого вхождения NUL в некоторых оболочках) и завершающие символы новой строки.

var=$(printf '%s\n\n\n' 'foo\bar\\baz')

Сохранит foo \ bar \\ baz в $ var .

Если вы не видите этих обратных косых черт в $ var , это может быть связано либо с тем, что вы не проверили их правильность, например с помощью echo или ] print , которая интерпретирует escape-последовательности с обратной косой чертой.

Например, в режиме соответствия UNIX bash echo дает:

bash-4.3$ echo "$var"
foar\baz

( \ b был расширен до backspace , который при отправке на терминал заставляет его вернуться на один символ назад).

Вы хотите использовать printf для вывода произвольных данных (и не забудьте указать свои переменные в кавычках):

bash-4.3$ printf '%s\n' "$var"
foo\bar\\baz

И когда этот вывод поступает на терминал, вы можете хотите обработать его с помощью sed -nl , чтобы, например, стали видны управляющие символы или символы конечного пробела.


Или это потому, что эти обратные косые черты не выводились на стандартный вывод.Например:

foo() {
  printf foo
  printf '\\' >&2
  printf 'bar\n'
}

При запуске этой функции:

bash-4.3$ foo
foo\bar
bash-4.3$ var=$(foo)
\bash-4.3$ printf '%s\n' "$var"
foobar

\ не попал в $ var , он был выведен в stderr.


Или, конечно, это может быть потому, что они вообще не выводятся, как предполагает ваш комментарий к ответу Бенджо, но тогда это будет проблемой в вашем Java-приложении, а не в bash .

2
19.01.2016, 01:43
0 ответов

Теги

Похожие вопросы