簡體   English   中英

Bash - 處理變量中的(單)引號(對於 Curl 命令)

[英]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 個參數),然后我可以在命令中使用它?

有一些類似的問題,但它們是針對其他情況的。

您想要做的是存儲一個單詞列表(如-Haccept: */*,其中每個單詞可能包含空格字符 由於bash用空格分隔字符串中的單詞(默認情況下),因此很難將字符串變量用於可能包含空格字符的單詞列表。

一個簡單的解決方案是使用列表變量 每個列表成員都是一個單詞(因此可以根據需要包含空格)。 擴展該列表時,請確保正確引用。 在你的情況下:

declare -a HEADERS
HEADERS=(
  '-H' 'accept: */*'
  '-H' 'api-key: $API_KEY'
)
curl -X GET "..." "${HEADERS[@]}"

擴展數組時請注意"..."字符。 他們將確保每個列表項都擴展為單個專用詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM