簡體   English   中英

將變量作為索引傳遞給bash數組

[英]Passing variable as index to bash array

我試圖在這個和其他論壇上找到答案。 以下是一個bash腳本,它應該在for循環中運行一系列命令。 我正在從文件中讀取2列。 第一列有文件名列表(FARR),第二列有一個參數 - 處理中使用的數字(NARR)。 它將為FARR中的每個文件運行一組命令,並在“do”之后的命令中使用文件名和參數。 盡管$ {NARR [$ N]}沒有將參數添加到行尾,但一切正常。 此階段的參數為空白。 使用echo $ NARR會顯示完整列表。 所以數據在那里...任何幫助將不勝感激。

#!/bin/bash

DIR='gauss_data/'
declare -i N=0
FARR=$(cat $DIR'all.dat' | awk '{if (NR!=1) print $1}')
NARR=$(cat $DIR'all.dat' | awk '{if (NR!=1) print $2}')
for f in $FARR;
do
    ./gauss_and_noise.py -i $DIR$f -o $DIR$f'.out' -d --save $DIR$f'.out.plot.png' --n0 ${NARR[$N]}
    let "N++"
done

你說NARR是一個數組,但你給它一個字符串值

也許改變這個

NARR=($(awk 'NR>1 {print $2}' "$DIR"all.dat))

此外,要迭代數組,請使用以下語法:

for f in "${FARR[@]}"

通過使用while循環和read命令,您可以大大簡化這一點。 循環之前的read是消耗輸入文件的第一行而不使用它。 不需要陣列; 只需在閱讀時使用每個輸入行。

dir='gauss_data'
declare -i N=0
{
    read
    while read f n rest; do
        ./gauss_and_noise.py -i "$dir/$f.out" -d \
                             --save "$dir/$f.out.plog.png" --n0 $n
        ((n++))
    done
} < $dir/all.dat

暫無
暫無

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

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