BashベースのブラックボックスCLIを使用していますが、何が利用できるのかは全くわかりません。中かっこ拡張は機能せず、引数を明示的にリストせずに繰り返す機能があり、これは最初にループで避けようとしたものです。
for x in {1..5}
do
for y in {a..c}
do
echo $HOME$x$y
done
done
中括弧を拡張せずにパラメータを明示的に一覧表示せずに、このようなタスクを実行するにはどうすればよいですか?環境変数も機能する必要があるため、例$HOME
にランダム変数を追加しました。
何がうまくいき、何がうまくいかないのか完全にはわかりませんので、他の選択肢(AWK、sed)を自由に提案してください。
答え1
jot
コメントに従って使用することをお勧めします。以下は(あまりきれいではない)awk
実装です。
#!/usr/bin/awk -f
BEGIN{
for(i=1;i<5;i++)
for(j=97;j<100;j++)
printf "%s%d%c ",ENVIRON["HOME"],i,j;
print;
}
-v
または(オプションを使用してシェル変数を変数に割り当てることもできます)awk
awk
#!/bin/bash
awk -f /dev/fd/3 3<< EOF
BEGIN{
for(i=1;i<5;i++)
for(j=97;j<100;j++)
printf "$HOME%d%c ",i,j;
print;
}
EOF
答え2
実行中であると確信している場合は、中bash
かっこ拡張が有効になっていない可能性があります。
利用して確認してください
echo $-
himBHs
私が使用しているシェルでは、B
このオプションは中括弧拡張を有効にするように設定されています。
次のコマンドのいずれかを使用して、ガサイの拡張を設定できます。
set -o braceexpand
set -B
この場合、文字や数字を繰り返す必要はありません。
echo {1..5}{a..c}
1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c
または、次を使用して無効にします。
set +o braceexpand
set +B
~につながる
echo {1..5}{a..c}
{1..5}{a..c}