![2つの変数を使用してforループを実行しますか? [コピー]](https://linux33.com/image/59243/2%E3%81%A4%E3%81%AE%E5%A4%89%E6%95%B0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6for%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
どうやって走れますか?forループまたはtwo variables
、言い換えれば、これは許可されますか?次の例で私の質問を明確にします。
テキストファイル「names.txt」に文字リストがあり、テキストファイル「numbers.txt」に数値リストがあります。 「numbers.txt」の各数字は、「names.txt」の文字(1行ずつ)と同じです。 names.txtに名前+ Numbers.txtに数字を含むフォルダを作成したいと思います。
names.txt numbers.txt output_folder name
A 1 A1
B 2 B2
C 3 C3
D 4 D4
E 5 E5
名前には、作成するフォルダの名前が含まれます。テキストの場合は、次のコードを使用できます。
#!/bin/bash
in=/in/on/an
out=/ss/tt/nn
for i in $(cat $in/names.txt); do
mkdir ${in}/${i}
done
forループに2番目の変数を追加する方法、つまり前のコードでは、変数iはname.txtに属します。 number.txtに属する変数bを追加するには?
答え1
これが実際に必要なものであればできます
mkdir $(paste letters.txt numbers.txt | tr -d '\t')
これによりディレクトリが作成されます。 Bashの一般的なケースでは、通常同様の方法で行われます。
paste letters.txt numbers.txt | while read let num; do
mkdir "${let}${num}"
done
特定の質問に答えるために、bashでは複数の変数を使用してループを実行することはできませんが、見てわかるように、一般的for
にいくつかの回避策があります。最も近いのは配列の使用です。たとえば、
let=( $(cat letters.txt) )
num=( $(cat numbers.txt) )
for((i=0;i<${#let[@]};i++)); do
mkdir "${let[$i]}${num[$i]}"
done