我需要将数字:十进制13和十进制10转换为bash shell脚本中的等效字符。生成的字符将是回车和换行。
知道如何做到这一点?
答案 0 :(得分:1)
您可以使用printf
两次,一次转换为八进制,另一次转换为ascii
A=10
printf \\$(printf '%03o' "$A")
$ A=10;printf \\$(printf '%03o' "$A") | od -c
0000000 \n
0000001
答案 1 :(得分:1)
我讨厌给出这个答案,但在bash中你可以做到:
nl=$'\12'
使$ nl成为具有单个换行符的字符串。 (八进制12) 因此,您可以使用以下内容填充十进制值:
N=10 N8=$( printf %o $N ) eval nl="\$'\\$N8'"
答案 2 :(得分:0)
这可能不是最简单的解决方案,但首先想到的是使用printf。不幸的是,printf需要八进制值,所以你需要翻译。要打印A(ascii十进制值65),可以使用dc计算八进制数并执行:
$ A=65 $ printf \\$( echo 8o${A}p | dc )
如果你愿意使用perl:
$ perl -e "print chr $A" # print character whose decimal value is stored in shell variable A $ perl -e 'print chr 10' # print a carriage return
答案 3 :(得分:0)
也许正则表达式适合你:
msg="13 ways to leave your lover is a top 10 hit for 1310 days"
stp1=${msg//10/\\n}
echo -e ${stp1//13/\\r}
结果:
ways to leave your lover is a top
hit for
days