在bash中编辑字符的ASCII值

时间:2013-12-09 21:27:18

标签: linux bash ascii

我正在尝试更新bash中字符串数组的每个字符的ASCII值,我想在其中添加2到现有字符ASCII值。

示例:

declare -a x =("j" "a" "f" "a" "r")

我想更新现有的ASCII值增加2,这样“j”将变为“l”​​

我无法找到任何处理超出ASCII值的内容 print f '%d' "'$char"

有人可以帮我吗?

而且当我尝试将数组复制到另一个数组时,它也不起作用 请注意我正在使用

declare -a temp=("${x[@]}")

它出了什么问题?

2 个答案:

答案 0 :(得分:2)

您可以通过首先使用printf将其转换为八进制转义序列(如\123)然后使用printf格式字符串生成字符来将整数转换为char:

#!/bin/bash
char="j"
printf -v num %d "'$char"
(( num += 2 ))
printf -v newchar \\$(printf '%03o' "$num")
echo "$newchar"

这仅适用于ASCII。

答案 1 :(得分:1)

似乎tr可以帮到你:

y=($(echo ${x[@]} | tr a-z c-zab))

tr将字符从一组映射到另一组。在此示例中,从a b c ... z集合中,它映射到c d e ... z a b。所以,你有效地“旋转”了角色。 ROT13 cipher使用了这个原则。