Новые строки, которые вы ищете, есть, вы их просто не видите, потому что вы используете echo
без цитирования переменной.
Валидация :
$ a=$( df -H )
$ echo $a
Filesystem Size Used Avail Use% Mounted on /dev/sda3 276G 50G 213G 19% / udev 2.1G 4.1k 2.1G 1% /dev tmpfs 832M 820k 832M 1% /run none 5.3M 0 5.3M 0% /run/lock none 2.1G 320k 2.1G 1% /run/shm
$ echo "$a"
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 276G 50G 213G 19% /
udev 2.1G 4.1k 2.1G 1% /dev
tmpfs 832M 820k 832M 1% /run
none 5.3M 0 5.3M 0% /run/lock
none 2.1G 320k 2.1G 1% /run/shm
$
Так как @ user4815162342 правильно указал , хотя новые строки в выходе не удаляются, trailing newlines удаляются с заменой команды. См. Эксперимент ниже:
$ a=$'test\n\n'
$ echo "$a"
test
$ b=$(echo "$a")
$ echo "$b"
test
$
В большинстве случаев это не имеет значения, потому что echo
добавит удаленную новую строку (если только она не вызывается с опцией -n
), но есть некоторые краевые случаи где в выводе программы есть еще одна конечная новая строка, и по какой-то причине они значительны.
В этом случае, как упоминалось в @Scrutinizer, вы можете использовать следующее обходное решение:
$ a=$(printf 'test\n\n'; printf x); a=${a%x}
$ echo "$a"
test
$
Объяснение: Символ x
равен добавляется к выходу (используя printf x
) после строк новой строки. Поскольку новые строки больше не trailing , они не удаляются подстановкой команд. Следующий шаг - удалить x
, который мы добавили, используя оператор %
в ${a%x}
. Теперь у нас есть исходный вывод со всеми новыми символами !!!
Вместо того, чтобы использовать подстановку команд для назначения вывода программы переменной, мы можем вместо этого использовать подстановку процесса для подачи вывода программы на read
встроенная команда (кредит для @ormaaj). Замена процесса сохраняет все новые строки. Чтение вывода в переменную несколько сложно, но вы можете сделать это следующим образом:
$ IFS= read -rd '' var < <( printf 'test\n\n' )
$ echo "$var"
test
$
Объяснение:
IFS=
. В противном случае read
не назначил весь вывод var
, а только первый токен. read
с параметрами -rd ''
. r
предназначен для того, чтобы предотвратить обратную косую черту в качестве специального символа, а с помощью d ''
установить разделитель на ничего, чтобы чтение читало весь вывод, а не только первую строку. Вместо того, чтобы использовать команду или замену процесса для назначения вывода программы переменной, мы можем вместо этого передать вывод программы команде read
(кредит @ormaaj). Трубопровод также сохраняет все новые строки. Обратите внимание, однако, что на этот раз мы установили необязательное поведение оболочки lastpipe
, используя встроенный shopt
. Это необходимо, так что команда read
выполняется в текущей среде оболочки. В противном случае переменная будет назначена в подоболочке, и она не будет доступна из остальной части скрипта.
$ cat test.sh
#!/bin/bash
shopt -s lastpipe
printf "test\n\n" | IFS= read -rd '' var
echo "$var"
$ ./test.sh
test
$
COM-объекты должны быть зарегистрированы, чтобы их можно было найти. Не имеет значения, в какой папке они находятся.
Позвоните по
regsvr32 mycomdll.dll
для dll.