支柱の拡張なしのループ

支柱の拡張なしのループ

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または(オプションを使用してシェル変数を変数に割り当てることもできます)awkawk

#!/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}

関連情報