文字と整数の 2 つの引数を取る bash スクリプトがあります。その整数の長さのその文字で始まるアルファベットで文字を出力したい(アルファベットを法とする)
#!/bin/bash
[[ $# != 2 ]] && echo Exactly 2 argument needed && exit 1
[[ "$1" =~ ^[a-zA-Z]$ ]] || { echo Enter only one char; exit 2; }
[[ "$2" =~ ^[0-9]+$ ]] || { echo Enter integer; exit 3; }
letter="$1"
cnt="$2"
letter=`printf "%d" \'$letter`;
z=`printf "%d" \'z`
a=`printf "%d" \'a`
[[ "$1" =~ ^[[:upper:]]$ ]] && { ((letter+=32)); } # make lower
while [[ "$cnt" -gt 0 ]]; do
printf \\$(printf "%03o" "$letter")
((letter++))
[[ "$letter" -gt $z ]] && letter=$a # alphabet modulo
((cnt--))
done
echo ""
このスクリプトは問題なく動作しますが、遅すぎます。2x n (int の値) を printf プログラムと呼ぶ必要があります。
私の質問はenable printf
、printfの実行速度を上げるための実用的なソリューションや、printfをまったく使用しないソリューションのようなものがあるかどうかです。
私は bash を使用する必要があり、可能な限り最速の方法で ASCII を処理する方法を知りたいだけです。私はcygwin atmでスクリプトを書いているので、それに関連して速度が低下する可能性があります。
このスクリプトは問題の単なる例です。「stdout フラッシュ バッファ サイズを増やす」ソリューションは必要ありません。ありがとう :)