Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Bash tr';[z-a]'';[a-z]';产生错误消息_Bash_Tr - Fatal编程技术网

Bash tr';[z-a]'';[a-z]';产生错误消息

Bash tr';[z-a]'';[a-z]';产生错误消息,bash,tr,Bash,Tr,我想用tr命令模拟rev命令(在字母表上) 所以我做了这个 echo abcdefghijklmnopqrstuvxyz | tr '[z-a]' '[a-z]' 这给了我 tr:'z-a'的范围端点按相反的排序顺序排列 所以我试过了 echo abcdefghijklmnopqrstuvxyz | tr 'abcdefghijklmnopqrstuvxyz' 'zyxvutsrqponmlkjihgfedcba' 它工作正常,输出为zyxvutsrqponmlkjihgfedcba 这是错

我想用
tr
命令模拟
rev
命令(在字母表上)

所以我做了这个

echo abcdefghijklmnopqrstuvxyz | tr '[z-a]' '[a-z]'
这给了我

tr:'z-a'的范围端点按相反的排序顺序排列

所以我试过了

echo abcdefghijklmnopqrstuvxyz | tr 'abcdefghijklmnopqrstuvxyz' 'zyxvutsrqponmlkjihgfedcba'
它工作正常,输出为
zyxvutsrqponmlkjihgfedcba

这是错误的
tr'[z-a]'[a-z]'

如果我指定
tr'[a-c]'[c-a]'
它也可以正常工作

任何帮助都将不胜感激


谢谢你

我想你很幸运有了“[c-a]”这件事,我的tr说的是
tr:[c-a]:无效的目标字符串
,这正是我所期望的

在我处理过的所有语言中,字符范围,即[a-z],都需要提升值。 很高兴你已经找到了解决方案

或者编写一个可以使用的函数,比如
tr“[a-z]”[$(revCharRange a-z)]”
(由于创建反向字符范围需要子壳,因此成本会更高

编辑 其中
revCharRange a-z
将输出
zyxw…cba


我希望这有帮助。

我怀疑
[c-a]
被解释为5个字符
[
c
,因为
[]
中的字符范围不需要
[]
(它们是用于SysV的,但不在POSIX中,现代
tr
尝试允许这两个字符,但有一些警告)@本杰克森:是的,很好的一点,不幸的是,我的经历可以追溯到POSIX之前,因此影响了我发布的许多答案;-)谢谢你的提醒。祝大家好运。还有类似的
tr'[a-z a-z]''[n-za-m n-za-m]“
。您可以将az转换为za,方法是将其置于要翻译的字符范围之间。在这种情况下,我将向前移动13个字母(如Rot13)。@Gcap:这对转换顺序有何帮助?