我正在嘗試提取 platformio.ini 檔案中定義的所有環境,以便在構建之前回圈它們并執行一些操作。該檔案如下所示:
; PlatformIO Project Configuration File
[env]
extra_scripts = pre:./somescript.py
[env:FirstEnvironment]
platform = atmelavr
board = nanoatmega328
framework = arduino
[env:SecondEnvironment]
platform = atmelavr
board = nanoatmega328
framework = arduino
我可以手動執行此操作
declare -a environments=(
"FirstEnvironment"
"SecondEnvironment"
)
for i in "${environments[@]}"
do
echo "$i"
done
但我現在想從檔案中提取資訊。我試過了
awk '/\[env:.*\]/{print $0 }' platformio.ini
它列出了環境,但我如何使用該資訊創建一個陣列?我也看過readarray所以也許我可以創建一個包含所有行的陣列,然后僅在條件匹配時才執行?我需要回圈兩次,這樣只用我需要的資訊創建陣列會更干凈。
uj5u.com熱心網友回復:
使用bash awk你可以這樣做:
readarray -t environments < <(
awk -F 'env:' 'NF==2 {sub(/\]$/, ""); print $2}' file)
# check content of array
declare -p environments
declare -a environments=([0]="FirstEnvironment" [1]="SecondEnvironment")
要不然:
for i in "${environments[@]}"; do
echo "$i"
done
uj5u.com熱心網友回復:
使用您展示的示例和嘗試,請嘗試awk使用 GNU 撰寫和測驗的以下代碼awk。
readarray -t environments < <(
awk -v RS='(^|\n)\\[env:[^]]*\\](\n|$)' 'RT{gsub(/^\n|\n$|\n\[env:|\]\n/,"",RT);print RT}' Input_file)
# Get/print contents of array name environments here:
declare -p environments
##Output of printing array's elements will be:
declare -a environments=([0]="FirstEnvironment" [1]="SecondEnvironment")
說明:簡單的解釋是,運行awk命令(設定RS為(^|\n)\\[env:[^]]*\\](\n|$)正則運算式并在程式的主塊中洗掉所有內容并僅從中間gsub,直到它從 Input_file 讀取輸入)并將其輸出發送到命令創建名為. 然后使用命令列印陣列的值及其索引項來顯示陣列的結構。RT[env:]readarrayenvironmentsdeclare -p
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/476678.html
上一篇:docker腳本中的貓
