私のコマンドの入力をマージします。

私のコマンドの入力をマージします。

各英語文字の数値表があります。各文字には任意の数字があります。私のコマンドはこれらの乱数をバイナリコードに変換します。ただし、一度に1文字しか変換できません。入力時に自動的に単語をマージしたいと思います。リンゴ、ペン、テーブルなど...

私の注文

#/bin/bash

echo "Write a letter"
read n
a=$(grep $n ~/Desktop/letter-table | awk '{print $2}')

echo `perl -e 'printf "%b\n",'$a`

出力

[hoovy@turbine Desktop]$ sh code-lang.sh
Write a letter
a
1111001
[hoovy@turbine Desktop]$ sh code-lang.sh
Write a letter
p
10010001
[hoovy@turbine Desktop]$ sh code-lang.sh
Write a letter
p
10010001
[hoovy@turbine Desktop]$ sh code-lang.sh
Write a letter
l
10010001
[hoovy@turbine Desktop]$ sh code-lang.sh
Write a letter
e
10111010
[hoovy@turbine Desktop]$

答え1

文字列を繰り返すだけです。また、あなたとgrep必要echoはないので削除しました。

#!/bin/bash
read -p "Enter a string:" -r string

for((i=0; i<${#string};i++)); do
  a=$(awk -v s="${string:$i:1}" '$1==s{print $2}' ~/Desktop/letter-table)
  perl -e 'printf "%b\n", $ARGV[0]' "$a"
done

あるいは、文字列をパラメータとして渡す方がよいでしょう。

#!/bin/bash
string="$*"

for((i=0; i<${#string};i++)); do
  a=$(awk -v s="${string:$i:1}" '$1==s{print $2}' ~/Desktop/letter-table)
  perl -e 'printf "%b\n", $ARGV[0]' "$a"
done

次のようにスクリプトを実行します。

$ foo.sh apple
1111001
10010001
10010001
1111001
10111010

関連情報