3

скажем, я могу rsh к машине XXX как пользователь foo, затем после выполнения:

$result=$(rsh -l foo XXX "ls");
echo $result;

Я обнаружил, что в результате удаляется перевод строки, и я не вижу результат построчно. так что мне делать, если я хотел бы получить перевод строки в возвращаемый результат?

2 ответа2

5

Новая строка там; ошибка в использовании echo для его проверки (без двойных кавычек вокруг переменной!)

result=$(rsh -l foo XXX "ls")
echo "$result"

В тривиальных случаях вы можете обойтись без кавычек, но интересные случаи могут даже содержать проблемы безопасности.

Если вы захватываете только стандартный вывод rsh так что вы можете распечатать его на стандартный вывод самостоятельно, это бесполезное использование echo

1

Изменить: Если вы имеете в виду переводы строк между каждым файлом, просто убедитесь, что результат указан в кавычках:

result="$(rsh -l foo XXX "ls");"

При этом будут сохранены любые символы, кроме NUL ($'\0'), которые не могут быть сохранены в переменной Bash.

Если вы имеете в виду, что завершающий символ новой строки потерян, то это самое простое из известных мне решений:

resultx="$(commands...; echo x)"
result="${resultx%x}"

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