我正在编写一个Bash程序,用于处理选项。
例如:./my_program -l 3 -a -s
-l 3
将限制输出为三行-a
将选择所有我的文件-s
将排序输出
目前为止,我只能同时使用两个选项:
if [ $all == 1 ]
then
if [ $sort == 1 ]
then
printf '%s\n' "${haikus[@]}" | sed -e 's/^[ \t]*//' | sort
else
printf '%s\n' "${haikus[@]}" | sed -e 's/^[ \t]*//'
fi
fi
如果使用
-a
选项,我会打印整个文件;或者,如果同时使用-a
和-s
选项,我将使用相同的命令但是会添加sort
指令。使用这种解决方案,如果我想实现
-l
选项,就需要创建很多"if"语句。首先,我考虑创建一个包含我的命令的变量。
例如:
sort='sort'
limit='grep -m3'
然后我这样编写我的命令:
printf '%s\n' "${haikus[@]}" | sed -e 's/^[ \t]*//' | $sort | $limit
但这根本行不通。
事实上,我想编写一个基本命令,并能根据选项添加更多内容。
如何在没有大量“if”语句的情况下正确完成此操作?
[
中使用==
不能保证在所有符合POSIX标准的shell中都能正常工作。对于字符串比较,使用=
更可靠,因为它是由测试的POSIX标准所要求的,并且即使是最小的/bin/sh
实现也可以正常工作,而不仅仅是bash。 - Charles Duffy