首页 > 解决方案 > 为什么它不会回显 "$d" anwser

问题描述

我需要脚本来输出结果,但echo "$d"不输出任何内容。我在脚本的前面创建了ciphertext.gz$fil并且是ciphertext.gz。bash 脚本:

echo "Fil: ciphertext.gz"

a="ABCDEFGHIJKLMNOPQRSTUVXYZ"

[[ "${*/-d/}" != "" ]] &&
echo "Usage: $0 [-d]" && exit 1
m=${1:+-}
m=-

t=$fil 
printf "Nøgle 'eks. ABCDE': "
read -r k
k=$(echo "$k" | tr [a-vx-z] [A-VX-Z] )
printf "\n"
for ((i=0;i<${#t};i++)); do
    p1=${a%%${t:$i:1}*}
    p2=${a%%${k:$((i%${#k})):1}*}
    d="${d}${a:$(((${#p1}${m:-+}${#p2})%${#a})):1}"
done
echo "$d"

标签: bash

解决方案


扩展评论,(不是真正的答案,因为不清楚代码应该做什么):

  1. 这是错误的:

    m=${1:+-}
    m=-
    

    ...因为它具有与以下相同的效果:

    m=-
    
  2. 这从标准输入中读取一行:

    read -r k
    

    ...除非密文只有一行长,否则可能会破坏接下来八行代码的目的。即使是标准输入unzip < ciphertext.gz |,它也只会解码第一行密文

    将其包裹for在适当的while read k循环中。


推荐阅读