2013-12-09 54 views
0

我試圖在bash上更新字符串數組中每個字符的ASCII值,在該bash上我要將2添加到現有字符ASCII值。編輯bash中字符的ASCII值

例子:

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

我想更新的ASCII值遞增2,這樣的「J」現有就會變成「L」

我找不到任何處理的ASCII值超越 print f '%d' "'$char"

任何人都可以幫助我嗎?

而且還當我試圖複製一個數組到另一個它不工作 請注意,我用

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

有什麼不對呢?

回答

1

看來tr可以幫助你在這裏:

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

tr字符映射從一組到另一個。在此示例中,從a b c ... z這一組中,它映射到c d e ... z a b。所以,你有效地「旋轉」角色。這個原理被ROT13 cipher使用。

+0

其實我已經假定值是2,如果這個值是動態的,那該怎麼辦?順便說一句,我想實施Vigenere密碼,如果這將幫助你瞭解我的觀點! – JafarAlali92

+0

在這種情況下,我認爲'bash'不是這裏的正確工具。你爲什麼要使用'bash'? – janos

+0

導致我的最終項目必須使用bash實現:/ – JafarAlali92

2

可以通過先用printf把它變成一個八進制轉義序列(如\123),然後使用該一個格式化字符串以產生字符轉的整數到一個char:

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

這僅適用於ASCII。