Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何在shell中创建从A到Z的字母列表并遍历它们?_Perl_Unix_Shell_Awk_Csh - Fatal编程技术网

Perl 如何在shell中创建从A到Z的字母列表并遍历它们?

Perl 如何在shell中创建从A到Z的字母列表并遍历它们?,perl,unix,shell,awk,csh,Perl,Unix,Shell,Awk,Csh,假设我想在cshshell中从字母A迭代到字母Z。我如何简洁地做到这一点 在bash中,我会做类似的事情 for i in 'A B C ...Z'; do echo $i; done 重点是我不想写A到Z,我想要类似的东西 [A-Z] 您能用AWK或Perl提供一行建议吗?Perl foreach i (`jot -c 26 65`) echo $i end 或在外壳内使用: for i in `perl -e '$,=" ";print +(A..Z)'` ; do echo

假设我想在cshshell中从字母A迭代到字母Z。我如何简洁地做到这一点

在bash中,我会做类似的事情

for i in 'A B C ...Z'; do echo $i; done
重点是我不想写A到Z,我想要类似的东西

[A-Z]
您能用AWK或Perl提供一行建议吗?

Perl

foreach i (`jot -c 26 65`)
    echo $i
end
或在外壳内使用:

for i in `perl -e '$,=" ";print +(A..Z)'` ; do echo $i ; done
那么:

for i in $(perl -e 'for my $i ("a".."z") { print "$i "; }'); do ...; done
。。。还是我误解了你想要实现的目标


(无可否认,使用
$,=''
的建议甚至比显式Perl
for
循环更好)。然而,我不理解在标点符号中包装范围的价值。如果我只使用:
print A..Z。。。虽然
perl-we'print a..z;'给我一个关于无引号字符串的警告,但大写版本没有。语句
print+(a..z)
给出了完全相同的警告。。。引用其中任何一条都可以消除警告。那么
+(…)`的意图是什么呢?只是想把它强制放到列表上下文中?

希望您已经安装了Ruby。;) 请参见shell中的普通命令行:

  • 使用Ruby从A到Z迭代并要求打印字母:

    $ ruby -e ' "a".upto("z") {|letter| print letter}; print "\n"'
    
  • 从A迭代到Z,并将当前迭代期间获得的值替换为字符串,然后打印该字符串:

    $ ruby -e ' "a".upto("z") {|letter| puts "mkdir #{letter}"}'
    
    执行列表以查看结果:

    $ ls -al drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 a drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 b drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 c $ls-al drwxr-xr-x 2 iuliu用户4096 2009-10-07 00:09 a drwxr-xr-x 2 iuliu用户4096 2009-10-07 00:09 b drwxr-xr-x 2 iuliu用户4096 2009-10-07 00:09 c
  • 希望这有点帮助!;)

    问候,,
    Iuliu

    没有人有呆滞的解决方案,因此这里有一个

    awk 'BEGIN{for(i=65;i<=90;i++) printf "%c", i}'
    

    awk'BEGIN{for(i=65;i使用awk:

    您可以使用以下链接引用ASCII字符集:

    现在,要遍历任何一组值,可以使用AWK命令,如下所示:


    awk'BEGIN{for(i=97;i我有完全相同的问题。显而易见的Windows用例是遍历驱动器号列表。这在Cygwin中有效:

    b{d..z};do(du-s)/cygdrive/$i;“”;中的i的
    
    
    或者另一个例子:

    b{d..h}{r..u};do df/cygdrive/$i|grep-v文件系统中的i的
    
    
    或者是另一个使用Perl的示例-感谢:

    perl-e'表示我的$i(“a”、“b”、“d”.“i”、“r”.“v”){print“$i\n”;}''sed-e's/^/\/cygdrive\/'
    
    请写一行,一共3行。所以shell向foreach i(
    jot-c 26 65
    )抱怨;echo$i;end jot:找不到命令。foreach?您只需在foreach var(…)后按enter键即可shell会让你继续输入行直到你输入End我想现在我理解了这个问题:Djot第一次出现在4.2BSD中。它可能不是在非BSD派生的操作系统中。它是“c-shell”而不是“玉米壳”。“Korn”shell完全是另一种动物。在bash中:$for I in{A..Z};do echo$I;doneIn Korn:$for I in{A..Z}^Jdo^Jecho$i^JDONE在bash中,您将省略字母周围的单引号。可能的重复。这不是我要寻找的。在上面,您无法迭代每个字母并对其进行处理,比如说mkdir,因为您无法单独访问它们。为什么不能迭代它们?Perl range运算符只返回一个列表。它类似于e任何其他列表。做任何你喜欢的事情。此外,你需要澄清你没有告诉我们的所有东西的问题。因为Andrei想在shell中迭代。为什么你在范围操作符周围有paren?我缺少一些奇怪的shell交互吗?我更喜欢
    perl-e'say for A..Z'
    这不起作用“use strict”(使用strict)。您需要在A和Z周围加引号。但是strict在默认情况下不启用,所以我想这很好。
    perl-e'$,=”;print+(A,b,d..k,“m”,t..Z)
    工作-需要在“m”周围加引号才能阻止perl将其解释为“match”运算符。在shell中:
    jot-c 26 A
    。 mkdir a mkdir b mkdir c mkdir d ... mkdir z
    $ mkdir $(ruby -e ' "a".upto("c") {|letter| puts "#{letter}"}')
    
    $ ls -al drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 a drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 b drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 c
    awk 'BEGIN{for(i=65;i<=90;i++) printf "%c", i}'