我想找一个bash(没有sed,awk,perl,......)来查明一个单词是否按字母顺序排列,换句话说每个字母都是。 例: bdjkz是真的, ahjmno是真的, sdgla是假的。
我已经在努力比较角色的ascii值了,所以如果有人能指出我正确的方向,那将会有很大的帮助!
由于
答案 0 :(得分:2)
Pure bash解决方案(不使用外部工具),使用参数扩展来处理字符串中的字符:
function compare () {
word=$1
for (( pos=0; pos<${#word}-1; pos++ )) ; do
[[ ${word:pos:1} < ${word:pos+1:1} ]] || return 1
done
return 0
}
使用
进行测试for word in bdjkz ahjmno sdgla ; do
if compare $word ; then
echo $word ordered
else
echo $word not ordered
fi
done
答案 1 :(得分:1)
如果您可以使用其他命令行工具(但不是awk
,sed
,perl
),您可以尝试:
[[ "YOURSTRING" = "$(echo "YOURSTRING" | grep -o '.' | sort -n |tr -d '\n')" ]] && \
echo "Alphabetic order"
[[ ... ]]
正在测试表达"YOURSTRING" =
字符串比较"$( ... )"
以字符串echo "YOURSTRING" | grep -o '.'
打印来自"YOURSTRING"
(-o '.'
的一行中的每个字符:仅打印任何单个字符的匹配项 - 注意 :此选项可能需要grep
的新版本)sort -n |
对4的输出进行排序。tr -d '\n'
重新加入5中的字符。(删除尾随的新行字符)答案 2 :(得分:0)
您可以使用:
p='bdjkz'
q=$(fold -w1 <<< "$p"|sort|tr -d "\n")
[[ "$p" == "$q" ]] && echo "in alphabetical order" || echo "not in alphabetical order"
答案 3 :(得分:0)
s=($(echo "existingString" | grep -o .)) # put each character of input string in an array.
k=($(printf '%s\n' "${s[@]}" | sort)) # sorts the input string
if [[ "${s[*]}" == "${k[*]}" ]]; then # comparing the input string array with sorted array
echo "alphabetical"
else
echo "not alphabetical"
fi