如何使用bash脚本检查参数数量?

时间:2018-11-11 21:45:19

标签: linux bash

如何在脚本中格式化通过bash脚本传递的参数数量?这是我目前可以使用的:

#!/bin/bash

echo "$# parameters"
echo "$@"

但是我想格式化正在使用的函数,但是每次运行它时,它都会返回为0参数:

#!/bin/bash

example()
{
 echo "$# parameters"; echo "$@";
}

example

我是否错误地考虑了这一点?

2 个答案:

答案 0 :(得分:1)

您没有将参数传递给函数。

#! /bin/bash

EXE=`basename $0`

fnA()
{
    echo "fnA() - $# args -> $@"
}

echo "$EXE - $# Arguments -> $@"
fnA "$@"
fnA five six

输出:

$ ./bash_args.sh one two three
bash_args.sh - 3 Arguments -> one two three
fnA() - 3 args -> one two three
fnA() - 2 args -> five six

使用function关键字是POSIX标准 not bash支持该功能,以实现ksh的兼容性。

编辑:根据戈登的注释用引号"$@"-防止重新解释用引号括起来的字符串中的所有特殊字符

答案 1 :(得分:0)

第二个应该工作。以下是我每天使用的几个具有相同功能的类似示例。

function dc() {
    docker-compose $@
}

function tf(){

  if [[ $1 == "up" ]]; then
    terraform get -update
  elif [[ $1 == "i" ]]; then
    terraform init
  else
    terraform $@
  fi
}

function notes(){
  if [ ! -z $1 ]; then
    if [[ $1 == "header" ]]; then
      printf "\n$(date)\n" >> ~/worknotes
    elif [[ $1 == "edit" ]]; then
      vim ~/worknotes
    elif [[ $1 == "add"  ]]; then
      echo "  • ${@:2}" >> ~/worknotes
    fi
  else
    less ~/worknotes
  fi
}

PS:OSX我需要声明function,在其他操作系统(如Ubuntu)上可能不需要它