Bash变量奇怪地包括当前目录的输出并删除字符

时间:2014-11-27 22:13:27

标签: bash shell scripting pipe

我正在编写一个简单的Bash脚本,使用aspell通过命令行拼写单个单词。

这样做的方法是:

echo "word" | aspell -a

Aspell然后输出类似的东西:

@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.6.1)
*

或者如果单词拼写错误:

@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.6.1)
& wordd 29 0: word, wordy, worded, words, Ward, Wood, ward, woad, wood, wort, world, woody, wooed, weird, word's, Wed, wed, wot, we'd, who'd, odd, warded, wooded, worked, wormed, sword, wad, wordier, wold

我的计划是在变量中捕获此输出,如果单词正确则不输出任何内容,或者如果拼写错误,则输出建议减去Aspell版本和拼写检查分数。

但是,当前目录的内容奇怪地被添加到变量中。到目前为止,这是脚本:

RESULTS=$(echo $1 | aspell -a)
echo $RESULTS

为脚本添加拼写错误的单词(即将拼写错误的单词设置为1)会给我这样的信息:

@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.6.1) & shipp 41 0: ship, shoppe, shop, shipper, chippy, chip, ships, Sharp, chirp, shape, sharp, sheep, shopper, choppy, hippo, hippy, supp, chop, shipped, hip, sip, ship's, shops, chipper, chippie, Sharpe, Sherpa, chappy, chirpy, shpt, shim, shin, shit, shiv, whip, chap, chimp, chips, shier, shop's, chip's

(注意一行上的所有内容都不正确)

并给出一个拼写正确的单词:

@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.6.1) Gemfile Gemfile.lock README.rdoc Rakefile app bin config config.ru db lib log public spell.sh test tmp vendor

奇怪地添加了我当前目录的内容(Gemfile Gemfile.lock等)。另请注意,此处缺少换行符正确的aspell输出,其中包含正确拼写单词的星号。

显然有一些关于Bash的事情我不知道。有谁知道发生了什么?

2 个答案:

答案 0 :(得分:3)

您需要在echo中使用双引号,以防止命令aspell返回的星号的bash扩展:

echo "$RESULTS"

尝试以下命令并观察差异:

# echo "*"
# echo *

阅读bash manual pages

中的3.5.8 Filename Expansion部分

答案 1 :(得分:0)

尝试这样做:

RESULTS=$(echo "$1" | aspell -a | sed 1d)
[[ $RESULTS == \* ]] || echo "$RESULTS"