TCSHから:
異なるファイルを含む2つのリストがあります。その後、このリストを配列要素に渡す必要があり、リストは2つしかないので、ループを2回実行する必要があります。ただし、この場合、ループの実行には2つのリストのファイルと同じくらい時間がかかります。
set list_one = (one.s two.s three.s)
set list_two = (four.s five.s)
set arr=($list_one $list_two)
foreach i ($arr)
cat $i > $output.s
end
ここに私のコードサンプルがあります。私の考えでは、ループは2回だけ実行する必要があります(forと)がlist_one
5list_two
回実行されます(for one.s two.s three.s four.s five.s
)。
答え1
このアクションはset arr=($list_one $list_two)
リストを1つにマージします。
ここで何を探しているのかわかりませんが、次のようにリスト名を繰り返すことができます。
set names=(list_one list_two)
foreach i ($names)
echo $i
end
しかし、変数に最初の2つのリストの名前がある場合、そこで最初の2つのリストを実際に使用する方が難しいようです。 tcshが間接変数参照(経由を除く)をサポートしているかどうかが見つかりませんeval
。これはうまくいくようですが、評価で正しく引用するのは難しいようです。
#!/usr/bin/tcsh
set l1 = (aa bb cc)
set l2 = (dd ee)
set names = (l1 l2)
foreach i ($names)
eval set x = \(\$$i\)
foreach j ($x)
echo $i $j
end
end
しかし、空白を含む値が分割されていますが、この問題をどのように解決するのかわかりません。
正直なところ、私はTcshを捨て、Zshでも同じことをします。
l1=(aa bb cc)
l2=(cc dd)
names=(l1 l2)
for i in $names; do
for j in ${(P)i}; do
echo $i $j
done
done
値のスペースを処理する必要がありますが、空の要素は削除されます。