[英]Bash - handling of (single) quotes in variables (for a Curl command)
我正在編寫一個使用 CURL 的腳本。
所有請求都有一些通用的 HTTP 標頭。
curl -X GET "..." -H 'accept: */*' -H "api-key: $API_KEY"
所以我想把它們放到一個變量中:
HEADERS="-H 'accept: */*' -H \"api-key: $API_KEY\""
curl -X GET "..." $HEADERS ### <-- This is what I want to achieve.
如您所見,它需要混合
'
s 因為它包含*
,它可以擴展,"
s 因為有一個變量。我已經嘗試了很多轉義、混合 ' 和 " 的組合,逐漸構建字符串,但最終我總是在 Bash 添加不需要的轉義或留下我需要的那些。
我怎樣才能在一個變量中同時使用-H
參數(即所有 4 個參數),然后我可以在命令中使用它?
有一些類似的問題,但它們是針對其他情況的。
您想要做的是存儲一個單詞列表(如-H
或accept: */*
) ,其中每個單詞可能包含空格字符。 由於bash
用空格分隔字符串中的單詞(默認情況下),因此很難將字符串變量用於可能包含空格字符的單詞列表。
一個簡單的解決方案是使用列表變量。 每個列表成員都是一個單詞(因此可以根據需要包含空格)。 擴展該列表時,請確保正確引用。 在你的情況下:
declare -a HEADERS
HEADERS=(
'-H' 'accept: */*'
'-H' 'api-key: $API_KEY'
)
curl -X GET "..." "${HEADERS[@]}"
擴展數組時請注意"..."
字符。 他們將確保每個列表項都擴展為單個專用詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.