2017-08-11 199 views
0

我正在写一个小小的shell脚本,用于将ASCII字符转换为二进制,然后逐个从结果字节中获取每一位。shell - 如何从一个字节中单独获取每一位?

这里是我的代码:

#!/bin/sh 
binary=00000000 
bit0=0 
bit1=0 
bit2=0 
bit3=0 
bit4=0 
bit5=0 
bit6=0 
bit7=0 

#main 
read -p "Please enter your text: " word 

for i in $(seq 1 ${#word}) 
do 

    binary=`echo ${word:i-1:1} | perl -lpe '$_=unpack"B*"'` 
    echo $binary 

    for n in $(seq 1 ${#binary}) 
    do 

    eval "bit$n=${binary:i-1:1}" 

    done 

    echo $bit0 
    echo $bit1 
    echo $bit2 
    echo $bit3 
    echo $bit4 
    echo $bit5 
    echo $bit6 
    echo $bit7 
done 
sleep 5 

对于什么都在这里原因,这一块是不工作:

for n in $(seq 1 ${#binary}) 
do 

eval "bit$n=${binary:i-1:1}" 

done 

应该正确的数字从二进制变量分配每位#变量。 也可能你这段代码向我解释,我不完全理解它:

echo ${word:i-1:1} | perl -lpe '$_=unpack"B*"' 
+0

不知道你的意图可以给什么你告诉你”回覆 寻找。看看{typeset a =“10”;回声“$ {a:1:1}”| perl -lpe'$ _ =解压“B *”'; }结果。它是“00110000”,它是48的二进制表示,taht是字符串“01”的第二位置'0'的ASCII码。 –

回答

0

没关系,简单的复制粘贴&失败/错误:

EVAL“位$ N = $ {二进制: -1:1}” EVAL “位$ N = $ {二进制:ñ -1:1}”

相关问题