Subshell inside quotes

Просто чтобы закрыть этот вопрос, и, как советуют в комментариях, причина, по которой ваш массив выглядит «разделенным», заключается в том, как вы печатаете свой массив, а не в том, что ваш массив разделен чтением. Если вы сомневаетесь в том, что на самом деле содержит ваш массив, я бы предложил использовать либо declare -p (-p для печати), либо printf с использованием двойных кавычек.

На самом деле вы всегда должны дважды цитировать свои переменные, независимо от того, печатаете ли вы их или просто используете их в своих скриптах.

См. следующие тесты:

$ a="/media/root/persistence/file
/media/root/persistence/anotherfile
/media/root/persistence/(copy) file"

$ echo "$a"
/media/root/persistence/file
/media/root/persistence/anotherfile
/media/root/persistence/(copy) file

$ echo $a
/media/root/persistence/file /media/root/persistence/anotherfile /media/root/persistence/(copy) file

$ readarray -t y <<<"$a"
$ declare -p y
declare -a y=([0]="/media/root/persistence/file" [1]="/media/root/persistence/anotherfile" [2]="/media/root/persistence/(copy) file")

$ printf '%s\n' ${y[@]}
/media/root/persistence/file
/media/root/persistence/anotherfile
/media/root/persistence/(copy)
file

$ printf '%s\n' "${y[@]}"
/media/root/persistence/file
/media/root/persistence/anotherfile
/media/root/persistence/(copy) file

Как упоминалось don_crissti, вы получили такое поведение, потому что не сделали двойную кавычку своей переменной.

Чтобы немного подчеркнуть важность постоянного цитирования переменных, см. этот дополнительный тест:

$ b=" "

$ [ $b = " " ] && echo "ok" || echo "not ok"
bash: [: =: unary operator expected
not ok

$ [ "$b" = " " ] && echo "ok" || echo "not ok"
ok
0
08.08.2017, 02:20
1 ответ

Начните с рефакторинга кода.

bearer="Bearer \"$(printf user:pass | base64)\""
curl -X POST --header "$bearer" 'https://api.com/v1/auth'

Теперь, когда вы переходите к отладке, вам не нужно снова заключать в кавычки аргумент (s ).

echo curl -X POST --header "$bearer" 'https://api.com/v1/auth'
6
28.01.2020, 02:15

Теги

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