假设我有一个bash脚本,它计算正在使用的索引和表的数量,并将其显示给用户。最直接的输出显然是
echo ${numIndices} Indices
echo ${numTables} Tables
但是对于某些情况,输出在语法上是不正确的,例如1索引和1表将输出为
1 Indices
1 Tables
因此,涵盖所有案例的解决方案将是
if [[ ${numIndices} -eq 0 && ${numTables} -eq 0 ]]; then
echo ${numIndices} Indices
echo ${numTables} Tables
elif [[ ${numIndices} -eq 0 && ${numTables} -eq 1 ]]; then
echo ${numIndices} Indices
echo ${numTables} Table
elif [[ ${numIndices} -eq 0 && ${numTables} -gt 1 ]]; then
echo ${numIndices} Indices
echo ${numTables} Tables
elif [[ ${numIndices} -eq 1 && ${numTables} -eq 0 ]]; then
echo ${numIndices} Index
echo ${numTables} Tables
elif [[ ${numIndices} -eq 1 && ${numTables} -eq 1 ]]; then
echo ${numIndices} Index
echo ${numTables} Table
elif [[ ${numIndices} -eq 1 && ${numTables} -gt 1 ]]; then
echo ${numIndices} Index
echo ${numTables} Tables
elif [[ ${numIndices} -gt 1 && ${numTables} -eq 0 ]]; then
echo ${numIndices} Indices
echo ${numTables} Table
elif [[ ${numIndices} -gt 1 && ${numTables} -eq 1 ]]; then
echo ${numIndices} Indices
echo ${numTables} Table
elif [[ ${numIndices} -gt 1 && ${numTables} -gt 1 ]]; then
echo ${numIndices} Indices
echo ${numTables} Tables
fi
这样的事情是否会被认为过于迂腐/低效/难以理解,而且在编程时通常不赞成?
答案 0 :(得分:4)
写一个函数:
plural(){
if [[ $1 -eq 1 ]]
then
echo "$1 $2"
else
echo "$1 $3"
fi
}
然后你可以这样做:
plural "${numIndices}" Index Indices
plural "${numTables}" Table Tables
答案 1 :(得分:3)
这还取决于本地化需求。如果您的代码需要支持多种语言(现在或最终)的输出,那么英语的硬编码规则就是一种浪费,尤其是因为许多其他语言的规则将变得更复杂。
答案 2 :(得分:2)
你需要更好的实现,如下所示:
echo_count(){
if [ "$1" = 1 ]; then
echo $1 $2
else
echo $1 $3
fi
}
echo_count 1 Index Indices
echo_count 2 Table Tables
输出
1 Index
2 Tables
答案 3 :(得分:2)
“索引”是可接受的索引复数。我不担心使用完全正确的形式,只需输出
1 Table(s)
1 Index(es)
如果您确实想要迂腐,请分别处理每个案例。您的if
语句有很多冗余案例。
if [[ $numTables -eq 1 ]]; then
echo "1 Table"
else
echo "$numTables Tables"
fi
if [[ $numIndices -eq 1 ]]; then
echo "1 Index"
else
echo "$numTables Indices"
fi
或某些oneliners
[[ $numTables -eq 1 ]] && echo "1 Table" || echo "$numTables Tables"
[[ $numIndices eq 1 ]] && echo "1 Index" || echo "$numIndices Indices"