0

这个问题是基于这个线程

编码

function man()
{       
    man "$1" > /tmp/manual; less /tmp/manual 
}

问题:如果我使用一个选项,命令不知道想要的手册在哪里

例如,

man -k find

给我一个错误,因为参考是错误的。该命令读-k作手册。

我尝试用伪代码解决问题

if no parameters
    run the initial code
if one parameter
    run: man "$2"
...

换句话说,我们需要在开头添加一个选项检查,这样

伪代码

    man $optional-option(s) "$n" > /tmp/manual; less /tmp/manual

其中 $n

  • 如果选项为零,则 n=1
  • n=2 如果有 1 个选项
  • 如果有 2 个选项,则 n=3
  • ……

您如何进行这样的“选项检查”以更改 $n 的值?

已开发的问题:为从 n=1 到 n=2 的情况创建两个 if 循环

4

2 回答 2

2

传递所有参数怎么样

function man()
{       
    man $@ > /tmp/manual; less /tmp/manual 
}

你在标题中提到的少的错误是什么?

于 2009-07-03T15:48:44.637 回答
1

首先,您可以man使用$*or将所有函数的参数传递给$@。您可以阅读man sh有关两者之间差异的详细信息;短篇小说几乎总是使用"$@"双引号。

其次,临时文件是不必要的。您可以通过将输出man直接传递到less

function man() {
    man "$@" | less
}

顺便说一句,如果您只是尝试使用不同的寻呼机(man使用more并且您想要更高级less的),那么您可以设置一个公认的PAGER环境变量来覆盖默认寻呼机。您可以将其添加到您~/.bashrc的实例中,以告诉所有程序less在显示多个输出屏幕时使用:

export PAGER=less

要回答您的确切问题,您可以检查参数的数量$#

if [ $# -eq 0 ]; then
    : # No arguments
elif [ $# -eq 1 ]; then
    : # One argument
# etc.

您可能还会发现该shift命令很有帮助。它重命名$2$1$3$2等等。它通常在循环中用于一一处理命令行参数:

while [ $# -gt 1 ]; do
    echo "Next argument is: $1"
    shift
done

echo "Last argument is: $1"
于 2009-07-03T15:59:41.083 回答