我正在尝试编写一个有助于解决填字游戏的 bash 脚本。例如,问题是“德语中的酒精饮料”。我已经有一个“B”在第一位,一个“R”在最后一个位置,中间有两个间隙。所以一个正则表达式是 $B..R^ 因为我住在瑞士,所以我想使用 ngerman 字典 (DICT=/usr/share/dict/ngerman)。以下是我直接在 shell 上执行此操作的方法:
grep -i '^B...$' /usr/share/dict/ngerman
这非常有效,“Bier”这个词出现在其他三个词中。由于这种语法很麻烦,我想写一个小批处理脚本,这样我就可以像这样输入它:
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)
,它会失败。怎么了?