Si npm
reconoce estos dos nombres de variables de entorno, entonces sería suficiente export
en 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 npm
desde un shell interactivo sin mencionarlos en absoluto.
Si npm
es invocado por una secuencia de comandos que no hereda su entorno interactivo, configure las variables de la manera anterior en esa secuencia de comandos.
Неявный конечный символ новой строки -— это не , добавленный встроенной командой readarray
, а строкой здесь -(<<<
)из bash
, см. . Почему bash здесь -строка добавляет завершающий символ новой строки? . Вы можете избавиться от этого, напечатав строку без новой строки -с помощью printf
и прочитав ее с помощью метода подстановки процесса -< <()
readarray -td, ARR < <(printf '%s' "$VAR")
declare -p ARR
теперь будет правильно генерироваться
declare -a ARR=([0]="a" [1]="b" [2]="c" [3]="d")
Вы можете использовать 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}")
(@
и двойные кавычки для сохранения пустых элементов ).
Консервированная версия ответа @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
(первым аргументом функции ).