我正在尝试更新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[@]}")
它出了什么问题?
答案 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使用了这个原则。