在 Bash 中循环遍历字母

Posted

技术标签:

【中文标题】在 Bash 中循环遍历字母【英文标题】:Looping through alphabets in Bash 【发布时间】:2011-11-10 03:12:45 【问题描述】:

我想mv所有以'x'开头的文件到目录'x';类似:

mv path1/x*.ext path2/x

对所有字母 a, ..., z 都这样做

如何编写一个 bash 脚本,让 'x' 在字母表中循环?

【问题讨论】:

【参考方案1】:

这应该让你开始:

for letter in a..z ; do
  echo $letter
done

【讨论】:

【参考方案2】:
for x in a..z
do
    echo "$x"
    mkdir -p path2/$x
    mv path1/$x*.ext path2/$x
done

【讨论】:

请问为什么在第 4 行和第 5 行用大括号将 x 括起来? 这里不是必需的,但是很好,它可以工作,并且使参数更加突出;)gnu.org/software/bash/manual/… 通常"$x" 就足够了,而且是让它脱颖而出的更好方法。 @WeijunZhou 如果您想扩展变量 x 后跟字母 'y' 和 'z',这将是一个问题。如果您尝试扩展 "$xyz",解释器会认为您正在尝试打印一个名为 xyz 的变量,而 "$xyz" 会让解释器确切知道您要做什么 我的意思是"$x"yz【参考方案3】:

这是使用嵌套大括号扩展生成西班牙字母表的方法

for l in a..n,ñ,o..z; do echo $l ; done | nl
1  a
 ...
14  n
15  ñ
16  o
...
27  z

或者干脆

echo -e a..n,ñ,o..z"\n" | nl

如果要生成obsolete 29 个字符的西班牙字母表

echo -e a..c,ch,d..l,ll,m,n,ñ,o..z"\n" | nl

法文字母或德文字母也可以这样做。

【讨论】:

避免拆分字母的丑陋替代方案:for j in $(for i in $(echo a..z ñ ch ll ); do echo $i; done| sort | xargs); do echo "Hello-$j"; done【参考方案4】:

使用rename

mkdir -p path2/a..z
rename 's|path1/([a-z])(.*)|path2/$1/$1$2' path1/a..z*

如果您想从文件名中去除前导 [a-z] 字符,更新后的 perlexpr 将是:

rename 's|path1/([a-z])(.*)|path2/$1/$2' path1/a..z*

【讨论】:

【参考方案5】:

也是大写的

for letter in a..z,A..Z; do
  echo $letter
done

【讨论】:

【参考方案6】:

这个问题和答案对我的问题有所帮助。 我需要在 bash 中放大字母表的一部分

虽然扩展is strictly textual

I found a solution: 并让它变得更加简单:

START=A
STOP=D
for letter in $(eval echo $START..$STOP); do
    echo $letter
done

结果:

A
B
C
D

希望它对寻找我必须解决的相同问题的人有所帮助, 也在这里结束

【讨论】:

【参考方案7】:

我希望这会有所帮助。

对于 a..z 中的 i

因为我在 A..Z

对于我在 a..z,A..Z

根据需要使用循环。

【讨论】:

其他答案已经涵盖了这一点。请不要添加重复项,或解释您的答案比以前的答案更好。

以上是关于在 Bash 中循环遍历字母的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历 Bash 中的字符串数组?

在linux shell(bash)编程中,如何通过递归方式遍历文件

动态循环遍历Python函数中的函数列表

如何让 Python 循环遍历句子,但它给了我句子中的单词而不是句子中的每个字母? [复制]

用PHP循环遍历字母表

使用 Bash find 遍历目录中的特定文件