我想检查是否
传递给bash脚本的命令行参数的数量等于一个
参数指向现有文件
参数以.epub
结尾(换句话说,文件扩展名为.epub
)
我已经处理了第一个和第二个要求,但我无法处理最后一个要求。我的尝试如下:
if [ $# -eq 1 ] && [ -f $1 ] && [ ${"$1": -5} == ".epub" ]; then
答案 0 :(得分:0)
替换:
${"$1": -5}
使用:
${1: -5}
另外,如果文件名中包含空格,请使用双引号:
[ $# -eq 1 ] && [ -f "$1" ] && [ "${1: -5}" == ".epub" ]
最后,==
而非${1: -5}
都不是POSIX。如果您想要POSIX兼容性,请使用:
[ $# -eq 1 ] && [ -f "$1" ] && [ "${1%.epub}" != "$1" ]
这不仅适用于bash,也适用于许多其他shell。