fish shell :многострочный захват -линейный вывод в переменную с конвейером или чтением

  1. Выключите компьютер и перезагрузите его, нажав Alt для отображения меню выбора загрузки.
  2. Щелкните имя вашего жесткого диска (внешний ), после чего он загрузится с вашего внешнего жесткого диска

Если вы используете MacOS, вы можете выбрать System Preferencesв меню Apple, нажать Startup Disk,, выбрать имя вашего внешнего жесткого диска и нажатьRestart.

1
15.08.2020, 17:17
1 ответ

Замените set var (command)на set var (command | string split0)

.

Пояснение:

подстановка команд по умолчанию разбивается на новую строку. Переменная $response — это список строк вывода. Это задокументировано

$ set var (seq 10)
$ set --show var
$var: not set in local scope
$var: set in global scope, unexported, with 10 elements
$var[1]: length=1 value=|1|
$var[2]: length=1 value=|2|
$var[3]: length=1 value=|3|
$var[4]: length=1 value=|4|
$var[5]: length=1 value=|5|
$var[6]: length=1 value=|6|
$var[7]: length=1 value=|7|
$var[8]: length=1 value=|8|
$var[9]: length=1 value=|9|
$var[10]: length=2 value=|10|
$var: not set in universal scope

К счастью, есть средство

$ set var (seq 10 | string split0)
$ set -S var
$var: not set in local scope
$var: set in global scope, unexported, with 1 elements
$var[1]: length=21 value=|1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n|
$var: not set in universal scope

# OR
$ set oldIFS $IFS
$ set --erase IFS
$ set var (seq 10)
$ set -S var
$var: not set in local scope
$var: set in global scope, unexported, with 1 elements
$var[1]: length=20 value=|1\n2\n3\n4\n5\n6\n7\n8\n9\n10|
$var: not set in universal scope
$ set IFS $oldIFS

Обратите внимание на разницу с string split0сохранением завершающей новой строки.

Если вы согласны с тем, что $response представляет собой список строк, но вы просто хотите отобразить его правильно:

printf "%s\n" $response

# or, with just a literal newline as the join string
string join "
" $respose
2
18.03.2021, 23:13

Теги

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