順番に番号付けされたエイリアスを繰り返すには?

順番に番号付けされたエイリアスを繰り返すには?

3つのエイリアスがあります。名前はecho1、echo2、echo3です。

より大きなコマンドの一部として、これら3つのコマンドをどのように実行できますか?

$ alias echo1='echo 1'
$ alias echo2='echo 2'
$ alias echo3='echo 3'

$ echo1
1

$ echo2
2

$ echo3
3

$ echo{1..3}
bash: echo1: command not found

$ bash -ic echo{1..3}
echo2: echo1: command not found

$ bash -ic 'echo{1..3}'
bash: echo1: command not found

解決策:Kusalalanandaの答えに基づいています。

 printf '%s\n' {1..3} | xargs -I {} bash -ic "echo{}"

ベストアンサー1

評価される順序のためにecho$i文字列として評価されますecho1(for i=1)。後ろにエイリアス拡張。

その文字列を別名として使用するには、結果の文字列を再評価する必要があります。

for i in 1 2 3; do
    eval "echo$i"
done

もしecho1echo2そしてecho3あったシェル機能、それはeval必要ありません(Bash 4.4でテスト済み)。

bash -cエイリアスは現在シェルセッションにローカルであるため、試行は機能しません。

あなたの最初のことは

echo{1..3}

続く

echo1 echo2 echo3

echo1結果は、次のように拡張されてもecho 1文字列の出力です。

1 echo2 echo3

個人的にエイリアスを希望するターゲットによって異なります。実際にこれにより、次の機能が実装されます。

dothing () {
    printf '%s\n' "$@"
}

...その後、使用してください

dothing {1..3}

生産

1
2
3

もちろん、これは直接達成することができますprintf '%s\n' {1..3}...

おすすめ記事