多くの人が同様の質問をしたことを知っていますが、正しく機能することはできません。
次のファイルがあります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
-n
jq
inputs
フラグを追加して出力を1行に圧縮できます-c
。
["apple","banana","cherry","Infra"]