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
もしecho1
、echo2
そして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}
...