クロスワードの解決に役立つ bash スクリプトを作成しようとしています。たとえば、質問は「ドイツ語でアルコール飲料」です。最初の場所に「B」があり、最後の場所に「R」があり、その間に 2 つのギャップがあります。したがって、正規表現は $B..R^ になります。私はスイスに住んでいるので、ngerman 辞書 (DICT=/usr/share/dict/ngerman) を使用したいと思います。シェルで直接行う方法は次のとおりです。
grep -i '^B...$' /usr/share/dict/ngerman
これは完璧に機能し、「Bier」という単語が他の 3 つの単語の中に表示されます。この構文は扱いにくいので、次のように入力できる小さなバッチ スクリプトを書きたいと思います。
crosswords 'B..R'
これが私のアプローチです:
#!/bin/bash
DICT=/usr/share/dict/ngerman
usage () {
progname=$(basename $0)
echo "usage: $progname regex"
}
if [ $# -le 0 ]; then
usage
exit 1
fi
regex="'^$1$'"
cmd="grep -i $regex $DICT"
echo $regex
echo $cmd
$($cmd) | while read word; do
echo "$word"
done
しかし、何も表示されず、機能しません。デバッグの理由から$regex
、変数と変数も出力します。$cmd
出てくるものは次のとおりです。
'^B..R$'
grep -i '^B..R$' /usr/share/dict/ngerman
それがまさに私が必要としているものです。上記のコマンドをコピーして貼り付けると、完全に機能します。しかし、で呼び出すと$($cmd)
失敗します。なにが問題ですか?