我知道我们可以使用命令打印字母表中的字母序列echo
,并通过这样做进行了一些实验。
小写字母序列
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
大写字母序列
$ echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
大写和小写字母序列
$ echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z
现在这是我不明白的部分。请参阅special charcaters
从 Z 到 a。这里有更好的景色。
$ echo {a..Z}
a ` _ ^ ] [ Z
我想知道
这些特殊字符是如何出现在大写字母和小写字母之间的?
这些特殊字符序列意味着什么?
另外,我如何只打印中间的这个序列?
答案1
{A..z}
根据当前区域设置的字符编码进行扩展,最有可能是 ASCII 或接近它的编码。如果您运行man ascii
(如果您的系统上有这个)或查看ASCII 表Z
您会在和之间看到这些附加字符a
(与实际运行时得到的相同echo {Z..a}
)。
要仅获取大写/小写字符,请使用
echo {A..Z} {a..z}
为了得到中间的那些,你可以使用
typeset -a foo=($(echo {Z..a}))
echo ${foo[@]:1:((${#foo[@]} - 2))}
首先创建一个数组包括边界外的两个字符,然后访问所有数组元素除了边界字符。
PS:弄清楚为什么typeset -a foo=({Z..a})
不起作用留给读者作为练习:-)