Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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
Linux命令或Bash语法,用于计算下一个ASCII字符_Linux_Perl_Bash_Awk - Fatal编程技术网

Linux命令或Bash语法,用于计算下一个ASCII字符

Linux命令或Bash语法,用于计算下一个ASCII字符,linux,perl,bash,awk,Linux,Perl,Bash,Awk,我有一台Linux机器(5.1),我需要将以下任务添加到我的Bash脚本中 哪个Linux命令或Bash语法将计算下一个ASCII字符 备注–命令语法也可以是/Perl,但此语法必须在我的Bash脚本中 例如: input results a --> the next is b c --> the next is d A --> the next is B 您可以为Bash使用chr()和ord()函数

我有一台Linux机器(5.1),我需要将以下任务添加到我的Bash脚本中

哪个Linux命令或Bash语法将计算下一个ASCII字符

备注–命令语法也可以是/Perl,但此语法必须在我的Bash脚本中

例如:

 input                  results

 a    --> the next is   b
 c    --> the next is   d
 A    --> the next is   B
您可以为Bash使用
chr()
ord()
函数(请参阅):

perl-le“打印chr(ord()+1)”
交互式:

breqwas@buttonbox:~$ perl -le "print chr(ord(<>) + 1)"
M
N
breqwas@buttonbox:~$ echo a | perl -le "print chr(ord(<>) + 1)"
b
breqwas@buttonbox:~$perl-le“打印文档(ord()+1)”
M
N
非交互式:

breqwas@buttonbox:~$ perl -le "print chr(ord(<>) + 1)"
M
N
breqwas@buttonbox:~$ echo a | perl -le "print chr(ord(<>) + 1)"
b
breqwas@buttonbox:~$echo a | perl-le“打印chr(ord()+1)”
B
使用翻译(
tr
):

它打印:

bB nN zZ

Perl还处理字符串,在某种程度上:

perl -nle 'print ++$_'
此处有必要使用带有autochomp的
-l
选项,因为例如
a\n
将返回
1

字符值:

c="a"
要将字符转换为其ASCII值,请执行以下操作:

v=$(printf %d "'$c")
add=1
要添加到此ASCII值的值:

v=$(printf %d "'$c")
add=1
要通过向其添加$add来更改其ASCII值,请执行以下操作:

((v+=add))
要将结果转换为字符,请执行以下操作:

perl -X -e "printf('The character is %c\n', $v);"
我使用
-X
禁用所有警告


您可以将所有这些组合在一行中,并将结果放入可变的$r:

c="a"; add=1; r=$(perl -X -e "printf('%c', $(($add+$(printf %d "'$c"))));")
achar ()
{
     c="$1"; add=$2
     printf "$(perl -X -e "printf('%c', $(($add+$(printf %d "'$c"))));")"
}
您可以打印结果:

echo "$r"

您可以创建一个函数来返回结果:

c="a"; add=1; r=$(perl -X -e "printf('%c', $(($add+$(printf %d "'$c"))));")
achar ()
{
     c="$1"; add=$2
     printf "$(perl -X -e "printf('%c', $(($add+$(printf %d "'$c"))));")"
}
您可以使用以下功能:

x=$(achar "a" 1) // x = the character that follows a by 1
或者你可以做一个循环:

array=( a k m o )
for l in "${array[@]}"
do
     echo "$l" is followed by $(achar "$l" 1)
done

如果您的输入是z/z,您希望发生什么?这不是符合逻辑的情况(在z或z之前我需要!!!)非常适合tr。使用bash,您可以编写
printf“%s->下一个是%s\n'$input”“$(tr'a-yA-Y''b-zB-z',这不会将自身限制为ASCII输入或输出。