Как удалить новую строку, добавленную readarray, при использовании разделителя?

Si npmreconoce estos dos nombres de variables de entorno, entonces sería suficiente exporten el archivo de inicialización de su shell donde los configuró:

export BROWSERSTACK_USERNAME=<my-username> 
export BROWSERSTACK_ACCESS_KEY=<my-access-key>

Entonces debería poder invocar npmdesde un shell interactivo sin mencionarlos en absoluto.

Si npmes invocado por una secuencia de comandos que no hereda su entorno interactivo, configure las variables de la manera anterior en esa secuencia de comandos.

9
20.05.2019, 14:40
3 ответа

Неявный конечный символ новой строки -— это не , добавленный встроенной командой readarray, а строкой здесь -(<<<)из bash, см. . Почему bash здесь -строка добавляет завершающий символ новой строки? . Вы можете избавиться от этого, напечатав строку без новой строки -с помощью printfи прочитав ее с помощью метода подстановки процесса -< <()

readarray -td, ARR < <(printf '%s' "$VAR")
declare -p ARR

теперь будет правильно генерироваться

declare -a ARR=([0]="a" [1]="b" [2]="c" [3]="d")
24
27.01.2020, 20:05

Вы можете использовать split+glob (что происходит, когда вы оставляете раскрытие без кавычек в контекстах списка ). Он мешает нам большую часть времени, было бы стыдно не использовать его, когда он нам действительно нужен:

IFS=,
set -o noglob

ARR=($VAR) # split+glob with glob disabled, and split using, as delimiter

Это немного менее запутанно, чем запись временного файла и последующий вызов readarrayдля него, как в подходе readarray <<< "$string"(также обратите внимание, что readarray -dнужна самая последняя версияbash).

Обратите внимание, что несмотря на то, что SвIFS(означает разделитель ), он работает так же, как readarrayв том смысле, что a,,b,разбивается на "a", ""и только "b".

Для настоящего оператора расщепления вы можете использовать zshвместо:

ARR=("${(@s:,:)VAR}")

(@и двойные кавычки для сохранения пустых элементов ).

5
27.01.2020, 20:05

Консервированная версия ответа @StéphaneChazelas:

# usage: setarray varname sep string
setarray(){ declare -n a=$1; local IFS=$2 -; set -f; a=($3); }

$ setarray arr, 1,2,3,
$ declare -p arr
declare -a arr=([0]="1" [1]="2" [2]="3")

$ setarray path : "$PATH"
$ setarray ld_preload ': ' "$LD_PRELOAD" # its elements can be separated by either ':' or spaces
...

Параметр local -сделает такие опции, как set -f(noglob), локальными для функции, точно так же, как и переменные.

declare -n a=$1создаст локальную переменную aв качестве псевдонима глобальной переменной, названной$1(первым аргументом функции ).

4
27.01.2020, 20:05

Теги

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