Как установить значение с новой строкой командой `env `?

[Debian 10.0.0 Buster + GNOME]

Я вижу такое же неадекватное поведение при использовании команды «открыть с помощью», как вы описываете.

Выберите любой файл с интересующим MIMETYPE , затем -щелкните правой кнопкой мыши -> Свойства.

Выберите вкладку «Открыть с помощью».

Там вы должны увидеть кнопку Установить по умолчанию .

2
14.10.2021, 10:31
3 ответа

Ваше понимание неверно. Когда вы сохраняете содержимое "hello\nworld"в переменной, \nинтерпретируется буквально. Только если вы вызываете такие инструменты, как printfили echoс флагом -e, они расширяют эти последовательности обратной косой черты при выводе на консоль.

В вашем случае вы хотите передать переменную в среду с расширенным символом новой строки, предложите использовать для этого кавычки в стиле ANSI C в bash

env FOO=$'hello\nworld' ruby -e 'puts ENV["FOO"]'

Или, если переносимость является проблемой, тривиальное решение состоит в том, чтобы поместить эти новые строки там, где вы хотите

f="hello
world"

env FOO="$f" ruby -e 'puts ENV["FOO"]'
10
14.10.2021, 11:03

GNU и FreeBSDenvимеют опцию-S("split" )[1], которая разбивает аргумент на пробелы, а затем интерпретирует множество escape-символов в результирующих строках, включая но не ограничивается\n:

$ env -S 'foo=bar\nquux printenv foo'
bar
quux
$ env -S 'foo=bar\nquux' printenv foo
bar
quux

[1] его основное использование для #!...строк shebang, но его можно использовать и в других местах, где ожидается командная строка, однако для его интерпретации используется специальный -синтаксический анализатор, а не оболочка, например -eдля большинства терминалов на базе vte -.

4
14.10.2021, 19:34

Использовать символ новой строки в значении:

$ env FOO="hello                                  
world" ruby -e 'puts ENV["FOO"]'

Выход:

hello
world

Если у вас есть строка с \n, которую вы хотите преобразовать в настоящую новую строку, используйте такую ​​утилиту, как printf,как и везде:

$ env FOO="$(printf "%b" 'hello\nworld')" ruby -e 'puts ENV["FOO"]'
hello
world

envне является чем-то особенным в этом отношении (на самом деле, envвсегда видит только настоящую новую строку, потому что она расширяется до запуска процесса ).

2
14.10.2021, 20:50

Теги

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