Bash:Forループシングルライン

Bash:Forループシングルライン
for i in {1..4}; do echo "Welcome $i";done

私の考えでは

Welcome 1
Welcome 2
.
.

代わりに私は得る

welcome {1..4}

Android端末エミュレータ

答え1

/bin/bashではなく/bin/sh(シェル)で実行されています。

$ /bin/sh -c 'for i in {1..4}; do echo "Welcome $i";done'
Welcome {1..4}

ここでbashを試してみてください。

$ /bin/bash -c 'for i in {1..4}; do echo "Welcome $i";done'
Welcome 1
Welcome 2
Welcome 3
Welcome 4

シェルを好む場合は、ニコラスが書いたことを行います。

for i in $(seq 4); do echo "Welcome $i" ; done

しかし、Bashを使用することをお勧めします。

答え2

を実行していないか、bash以前のバージョンを実行しているか、中bash括弧の拡張がわからないシェルを実行しています。

最も明白な説明は、ターミナルエミュレータが実行されているか/bin/sh、いくつかの小さなシェルが実行されていることです(ほとんどPOSIX互換であることを願っています)。

(そして中括弧拡張をサポートする他のすべてのシェルからbash)明示的なforループは暗黙的なループに変更される可能性があります:

printf 'Welcome %d\n' {1..4}

または

printf 'Welcome %d\n' $(seq 4)

支柱の拡張はないがseq

答え3

〜のように先行は達成するのが難しいbashを実行していないか、バージョンが悪いとしましょう。最近。私はbashの以前のバージョン(おそらくイディオムが開発される前に?)で次のものをテストしましたsh

for i in `seq 1 4`;do echo "Welcome $i";done

これだけで十分です。

答え4

このアプリケーションを使用する場合:Android端末エミュレータ、「それでは組み込みのAndroidシェルと通信するための端末エミュレータです。」つまり、自分の bash バージョンを手動でインストールしていない場合(デバイスはそれをルート化する必要があります。デバイスをルーティングしましたか?)、bash ではなくデフォルトの Android シェルを持つことになります。そのため、Androidのシェル機能セットのみを使用でき、次の高度なbash構文と機能は使用できません{1..4}

私が見つけたいくつかの情報。

関連情報