Bash関数の変数参照

Bash関数の変数参照

Bashスクリプトに短いヘルパー関数を定義しました。読みやすくするために、定型句ヘッダーを関数の外部で宣言された変数に置き換えたいと思います。

私はそのステートメントをさまざまな方法で参照しようとしましたが、何も機能しませんでした。

これを交換したいです。

put() {
  local response=$(curl -H 'Content-Type: application/json' -H 'Accept: application/vnd.urbanairship+json; version=3;' ...)
  echo $response
}

このような

headers=???

put() {
  local response=$(curl $headers ...)
  echo $response
}

つまり、次のよう$headersに拡張する必要があります。-H 'Content-Type: application/json' -H 'Accept: application/vnd.urbanairship+json; version=3;'

$headersパラメータとして正しく渡すには別の単語に拡張する必要があるため、配列を試してみました。

注:ほとんどあきらめました。このような単純な用途では議論する価値はありません。この時点での質問は啓発のためです。

ベストアンサー1

配列を使用してこの問題を解決できます。

headers=( -H 'Content-Type: application/json' 
          -H 'Accept: application/vnd.urbanairship+json; version=3;' )

"${headers[@]}"その後、通話に使用できますcurl

curl "${headers[@]}" URL

拡張への参照は、配列内の4つの項目(-H、、および)Content-Type: application/jsonが個別に参照されるため、シェルによってもはや分割されないようにします。-HAccept: application/vnd.urbanairship+json; version=3;

あなたの機能:

put () {
    curl "${headers[@]}" URL
}

responsewin実装の変数は不要です。引用符なしで呼び出すと、echoその値を空白(デフォルト)にさらに分割し、各部分にファイル名のグロービングを適用します。echo呼び出しの結果を出力するために代わりに使用することができます。curlcurl

おすすめ記事