簡體   English   中英

Bash For循環-多個變量,不使用數組?

[英]Bash For loop - multiple variables, not using arrays?

我遇到了一個似乎應該有一個簡單答案的問題,但是我一直在碰壁。

我正在嘗試創建一個目錄結構,其中包含通過兩個不同的變量命名的文件。 例如:

101_2465
203_9746
526_2098

我正在尋找看起來像這樣的東西:

for NUM1 in 101 203 526 && NUM2 in 2465 9746 2098
do
mkdir $NUM1_$NUM2
done

我考慮過只將NUM1和NUM2的值設置為數組,但這使腳本過於復雜-我必須使每一行代碼盡可能簡單,因為對編碼不太了解的人正在使用它。 他們已經熟悉了使用上面的示例設置的for循環(但僅使用1個變量),因此我試圖使其盡可能地接近。

提前致謝!

while read NUM1 NUM2; do
    mkdir ${NUM1}_$NUM2
done << END
101 2465
203 9746
526 2098
END

請注意,下划線是有效的變量名稱字符,因此您需要使用花括號將名稱NUM1與下划線區NUM1

...將NUM1和NUM2的值設置為數組,但這使腳本過於復雜...

不不不。 一切都會比數組更復雜。

NUM1=( 101 203 526 )
NUM2=( 2465 9746 2098 )
for (( i=0; i<${#NUM1}; i++ )); do
    echo ${NUM1[$i]}_${NUM2[$i]}
done

一種方法是用換行符分隔兩個變量中的條目,然后使用paste將它們放在一起:

a='101 203 526'
b='2465 9746 2098'

# Convert space-separated lists into newline-separated lists 
a="$(echo $a | sed 's/ /\n/g')"
b="$(echo $b | sed 's/ /\n/g')"

# Acquire newline-separated list of tab-separated pairs
pairs="$(paste <(echo "$a") <(echo "$b"))"


# Loop over lines in $pairs

IFS='
'

for p in $pairs; do
echo "$p" | awk '{print $1 "_" $2}'
done

輸出:

101_2465
203_9746
526_2098

暫無
暫無

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

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