6

cshシェルで文字Aから文字Zまで反復したいとします。どうすれば簡潔にそれを行うことができますか?

bashで私は次のようなことをします

for i in 'A B C ...Z'; do echo $i; done

ポイントは、AからZまでは書きたくないということです。

[A-Z]

AWKまたはPerlで1行の提案を提案できますか?

4

8 に答える 8

7
perl -e 'print for "a" .. "z", "A" .. "Z", 0 .. 9'
于 2009-09-22T17:31:15.673 に答える
5

Perl

$,=" ";print +(A..Z)

またはシェル内で使用するには:

for i in `perl -e '$,=" ";print +(A..Z)'` ; do echo $i ; done
于 2009-09-22T17:33:38.007 に答える
4

Rubyがインストールされていることを願っています。;)シェルからのこのプレーンなコマンドラインを参照してください。

  1. Rubyを使用してAからZまで反復し、文字を印刷するように依頼します。

    $ ruby -e ' "a".upto("z") {|letter| print letter}; print "\n"'
    
  2. AからZまで反復し、現在の反復中に取得した値を文字列に置き換えてから、文字列を出力します。

    $ ruby -e ' "a".upto("z") {|letter| puts "mkdir #{letter}"}'
    
    mkdir a
    mkdir b
    mkdir c
    mkdir d
    ..。
    mkdir z
    
  3. mkdir3つのディレクトリを作成するために、AからCへの反復の出力をへの引数として使用します。

    $ mkdir $(ruby -e ' "a".upto("c") {|letter| puts "#{letter}"}')
    

    結果を確認するためにリストを作成します。

    $ ls -al
    drwxr-xr-x2iuliuユーザー40962009-10-0700:09 a
    drwxr-xr-x2iuliuユーザー40962009-10-0700:09 b
    drwxr-xr-x2iuliuユーザー40962009-10-0700:09 c
    

これが少し役立つことを願っています!;)

よろしく、Iuliu

于 2009-10-06T21:19:05.190 に答える
1

どうですか:

for i in $(perl -e 'for my $i ("a".."z") { print "$i "; }'); do ...; done

...または私はあなたが達成しようとしていることを誤解していますか?

(確かに、使用する提案は明示的なPerlループ$,=" "よりも優れています)。ただし、範囲を句読点で囲むforことの価値はわかりません。+()私が使用するだけでうまくいきます:print A..Z;...perl -we 'print a..z;' gives me a warning about unquoted strings, but the uppercase version doesn't. The statement印刷+(a..z)gives exactly the same warning ... and quoting any of these eliminates the warning. So what's the intent of the+(...) `?これをリストコンテキストに強制しようとしているだけですか?)

于 2009-09-23T10:06:42.860 に答える
1

誰もgawkソリューションを持っていないので、ここに1つあります

awk 'BEGIN{for(i=65;i<=90;i++) printf "%c", i}'
于 2009-11-28T06:46:10.413 に答える
0
foreach i (`jot -c 26 65`)
    echo $i
end
于 2009-09-22T17:10:54.653 に答える
0

AWKの使用:

次のリンクを使用してASCII文字セットを参照できます。

http://ee.hawaii.edu/~tep/EE160/Book/chap4/subsection2.1.1.1.html

ここで、任意の値のセットを反復処理するために、次のようにAWKコマンドを使用できます。

awk'BEGIN {for(i = 97; i <123; i ++){printf "%c"、i}; printf "\ n";} '

結果:abcdefghijklmnopqrstu vwxyz

ここで、97は文字「a」に対応し、122は「z」に対応します。上記のリストの値を使用して、結果を変えることができます。

  • AからZの場合は65から90
  • 0から9の場合は48から57
  • aからzの場合は97から122

等々。

于 2016-09-13T11:17:53.263 に答える
0

まったく同じ質問がありました。明らかなWindowsの使用例は、ドライブ文字のリストを反復処理することです。これはCygwinで機能します:

for i in a b {d..z}; do (du -s "/cygdrive/$i;"); done

または別の例:

for i in a b {d..h} {r..u}; do df /cygdrive/$i | grep -v Filesystem; done

または、Perlを使用したさらに別の例-インスピレーションを与えてくれたJim Dennisに感謝します:

perl -e 'for my $i ("a","b","d".."i","r".."v") { print "$i\n"; }' | sed -e 's/^/\/cygdrive\//'
于 2020-08-06T00:28:58.550 に答える