BashがJSONをパラメータとして渡すことを主張する

BashがJSONをパラメータとして渡すことを主張する

多くの人が同様の質問をしたことを知っていますが、正しく機能することはできません。

次のファイルがありますDependencies

Accounts
Aggregates
Blog
Configuration
Contacts
Contents
DataTypes
Forms
Geo
Globalization
Media
Modules
Navigation
Podcast
Seo
Social
Taxonomy
Tracking
Vlog

JSON配列文字列に変換するコードは次のとおりです。

DependenciesPath=/$Organization/Common/Dependencies
mapfile -t DependenciesArray < $DependenciesPath
DependenciesArray+=('Infra')
export dependencies=$(echo '%s\n' "${DependenciesArray[@]}" | jq -R . | jq -s .)

それからそれを渡すコードがありますnode.js

node /$Organization/$Repository/LocalizationHelper.js $File $astFile "$dependencies"

問題は、私のファイルLocalizationHelper.jsに次の内容があることです。

[
  "%s\\n Accounts Aggregates Blog Configuration Contacts Contents DataTypes Forms Geo Globalization Media Modules Navigation Podcast Seo Social Taxonomy Tracking Vlog Infra"
]

ご覧のとおり、プロジェクトは互いに分離されておらず、%s\\n 最初は重複しています。これが私が望むものです(有効なJSON配列)。

[ "Accounts", "Aggregates", "Blog", ...]

私はここに閉じ込められています。どうすればいいですか?const dependencies = JSON.parse(process.argv[4])私のコードからJavaScript配列に変換したいです。

ベストアンサー1

jqファイルの変換に直接使用できます。mapfileシェル配列を使用または作成する必要はありません。

jq -Rn '[ inputs, "Infra" ]' </path/to/Dependencies

例:

printf '%s\n' apple banana cherry |
    jq -Rn '[ inputs, "Infra" ]'

出力:

[
  "apple",
  "banana",
  "cherry",
  "Infra" 
]

生(引用符なし)データを読み取るように指示し、-Rパイプの前に入力を読み取らないように指示します。適切な時点で処理するようにオペレータに任せます。jq-njqinputs

フラグを追加して出力を1行に圧縮できます-c

["apple","banana","cherry","Infra"]

おすすめ記事