【发布时间】:2014-10-31 22:26:54
【问题描述】:
我的系统管理员教授刚开始教我们 bash,他希望我们使用 grep 编写一个 bash 脚本,以便在不使用反向的情况下在 linux 字典中查找所有 3-45 个字母的回文。我的 if 语句出现错误,说我错过了一个'
更新代码:
front='\([a-z]\)'
front_s='\([a-z]\)'
numcheck=1
back='\1'
middle='[a-z]'
count=3
while [ $count -ne "45" ]; do
if [[ $(($count % 2)) == 0 ]]
then
front=$front$front_s
back=+"\\$numcheck$back"
grep "^$front$back$" /usr/share/dict/words
count=$((count+1))
else
grep "^$front$middle$back$" /usr/share/dict/words
numcheck=$((numcheck+1))
count=$((count+1))
fi
done
【问题讨论】:
-
从“if”行中删除“:”(或用“;”代替)。此外,使用 if [[ ... ]](双括号)。同样在“while”行中..
-
所以你和 Greg 有同一个教授(或者你的教授和他使用的是同一本书):stackoverflow.com/questions/26601234/bash-palindrome-checker
-
再次感谢 arun,但我的脚本与他的不同。我认为我接近让它运行了。有什么意见吗?
-
如果您的 ?是在单词文件(在Linux / Unix中)中找到所有从长度3到45的单词,这些单词是回文......并且你不必使用“rev”(反向)函数,然后看看我的答案,因为这就是你所需要的.你可以比我更好地对齐它。我使用了“[[:alnum:]]”,因为它可以搜索/工作以下词:P2P。但是,如果你想要更多的控制(比如 P2p 应该被视为回文),那么使用: w="$(echo $w | tr [A-Z] [a-z])";在 for 循环内(就在单词“do”之后和单词“if”之前。
标签: linux bash if-statement grep