(Shell Script) Переменная передается неправильно при извлечении значения из файла?

(Shell Script) Переменная передается неправильно при извлечении значения из файла?

У меня есть этот раздел команды curl внутри моего скрипта оболочки, который вызвал ошибку 500 repsonse от сервера. Однако этот код работает, когда я вручную запускаю команду.

curl -qgsSkH "Content-Type: multipart/form-data" --no-progress-bar --header "Token: $authKey" -F "filename=@$compressedFileName" -F "options={\"application\":\"2\",\"timeout\":\"5000\"}" https://www.domain.com > results.txt

Есть ли у кого-нибудь идеи почему?

Редактировать: Я провел ручную отладку и обнаружил, что проблема вызвана переменной $authKey. Эта переменная извлекается следующим кодом в моем скрипте.

# Get authentication key from FireEye AX response
while read line
do
    if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
    then
        authKey="${BASH_REMATCH[1]}"
    fi
done <auth.txt

Если я переопределю эту переменную, используя что-то вроде следующего, то скрипт будет работать.

authKey="TheAuthenticationKey"

Но почему это происходит? Предыдущая часть, где я передаю строку из файла, когда читаю его построчно, уже передает правильное значение (я дважды проверил, выведя вывод в txt-файл).

Редактировать Мне удалось углубиться еще немного. Когда я пытаюсь вывести значение токена в файл и добавляю " в начало и конец строки, я получаю такой результат.

"X-FeApi-Token: IDR+jxU1kB5ZpXsRNAgqfjTxkjZ0L2atH+l0H/NeatWDAJs=
"

Я не уверен, как удалить эту новую строку. Кто-нибудь может подсказать?

решение1

Проблема, по-видимому, вызвана новой строкой или возвратом каретки и новой строкой в ​​$authKey, как указано в "FireEye AX"

Вы можете удалить возврат каретки и перевод строки, пропустив его через конвейерtr -d '\r\n'

например

# Get authentication key from FireEye AX response
while read line
do
    if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
    then
        authKey="${BASH_REMATCH[1]}"
        authKey=$(printf "%s" "$authKey" | tr -d '\r\n')
    fi
done <auth.txt

Я не помню, будет ли $BASH_REMATCH передан в подоболочку... вы можете попробовать вместо этого сделать это в одной строке, возможно, это сработает:

authKey=$(printf "%s" "${BASH_REMATCH[1]}" | tr -d '\r\n')

решение2

Я предполагаю, что предоставленный вам файл данных имеет окончания строк в стиле Windows (CR/LF), а не окончания строк в стиле Unix/Linux (LF).

Это альтернативное сопоставление шаблона исключит любые возможные конечные CR:

[[ $line =~ ^SOME-PATTERN:[[:space:]](([^\015]*) ]]
authKey="${BASH_REMATCH[1]}"

Связанный контент