バッシュでは
echo a{b,c}d{e,f}
印刷
abde abdf acde acdf
私が見たい出力は
abde acdf
つまり、与えられた窒素Bashが使用したいパラメータ私構成する各中括弧ペア内の最初のパラメーター窒素ひも。
答え1
これを行うには、配列を使用します。
$ foo=( b c ); bar=( e f ); for i in {0..1}; do echo a${foo[$i]}d${bar[$i]}; done
abde
acdf
実際のユースケースはもう少し複雑であると仮定しているので、他のコマンドを使用して配列を埋め、そのサイズが必ずしもわからない場合は、次のようにします。
foo=( b c ); bar=( e f ); for i in $(seq 0 $((${#foo[@]}-1))); do
echo a${foo[$i]}d${bar[$i]};
done
答え2
これは愚かな答えですが、とにかく:
$ echo a{b,c,d}e{f,g,h} | awk 'BEGIN {N=3;} { for (i=0; i<N; i++) { print $(i*N+i+1) } }'
$ echo a{b,c,d,1}e{f,g,h,2} | awk 'BEGIN {N=4;} { for (i=0; i<N; i++) { print $(i*N+i+1) } }'
$ echo a{b,c,d,1,A}e{f,g,h,2,Z} | awk 'BEGIN {N=5;} { for (i=0; i<N; i++) { print $(i*N+i+1) } }'
答え3
中かっこの動作方法を変更できません。
たとえば、文字列がテキストに表示されない場合は、配列,
に連続した文字列置換を適用できます。
a=(,b,e @c,f)
a=("${a[@]/,/a/}")
a=("${a[@]/,/d}")
echo "${a[@]}"
しかし、ループがより明確になります。部品を互いに接続するには、文字列に表示されない区切り文字を使用できます。,
たとえば、中かっこ内には特別な機能があります。
a=(); IFS=,; set -f
for x in b,e c,f; do
a+=(a${x%*,}d${x#*,})
done
別のアプローチは、2つの並列配列を定義することです。
version=(test main)
files=(AppTest.java App.java)
for ((i=0; i<${#files}; i++) rm "src/$version[i]/java/org/sonatype/mavenbook/files[i].java"
私の考えでは、この特定のコマンドを処理する最も簡単な方法は関数を定義することです。
rmapp () { rm "src/$1/java/org/sonatype/mavenbook/$2.java"; }