Yani, bash
'alfabe genişleme şey ile, bu çalışır:
set {a..z}
for a do printf "./$a/$a%s\n" "$@"
done | xargs mkdir -p
Alfabeyi ilk satırda sadece bir kez yazarsanız, aynı konsept herhangi bir kabuğa taşınabilir olmalıdır. Aşağıdaki gibi yazmak istemiyorsanız ayarlanmış satıra ulaşmanın başka yolları da vardır:
seq -sP32P 97 123|dc
a b c d e f g h i j k l m n o p q r s t u v w x y z
... örneğin bir ASCII yerel ayarında çalışıyor. Böylece , ihtiyacınız olan argümanların ayrı bir listesini set $(seq -sP32P 97 123|dc)
alabileceğiniz herhangi bir komut veya başka bir komut yapabilirsiniz $IFS
, ancak, yani, sadece bir şeyi kullanmak bash
veya yazmak daha iyidir .
Her neyse, bence bunu sadece mkdir
gerektiği kadar çağırdığı için yapardım .
Ve nasıl çalıştığını göstermek için, daha küçük bir kümenin küçük bir hata ayıklama çıktısı:
sh -cx 'for n do printf "./$n/$n%s\n" "$@"; done|cat' -- arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg1/arg1%s\n' arg1 arg2 arg3
+ cat
+ for n in '"$@"'
+ printf './arg2/arg2%s\n' arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg3/arg3%s\n' arg1 arg2 arg3
./arg1/arg1arg1
./arg1/arg1arg2
./arg1/arg1arg3
./arg2/arg2arg1
./arg2/arg2arg2
./arg2/arg2arg3
./arg3/arg3arg1
./arg3/arg3arg2
./arg3/arg3arg3
Gördüğünüz gibi, for
sadece burada sh
invocation ve yukarıdaki ile parametreleri teslim ederek ayarladığım konumsal parametre dizi indeksi başına bir kez döngüler set ${positionals}
. Ancak printf
her bir yineleme için bağımsız değişken listesinde aynı diziyi alır ve biçim dizesini bağımsız değişkenlerinin her birine uygular, böylece gereksiz özyineleme olmadan özyineleme benzerliğini elde edersiniz.
Ve done|command
irade akışının for
boru üzerindeki tüm çıkışlarını aynı şekilde eklemek, done >file
hepsini bir dosyaya akıtır - tüm for...done
yapı için çıkış dosyasını yalnızca bir kez açar ve kapatır .