如何将传递给我的bash脚本的所有parameter passing给我的一个函数?

比方说,我已经定义了一个函数abc()来处理所有与分析传递给我的脚本的参数有关的逻辑。

我怎样才能通过我的bash脚本收到的所有参数? params的数量是可变的,所以我不能只是像这样传递的参数硬编码:

abc $1 $2 $3 $4 

编辑:更好的是,有什么办法让我的函数访问脚本参数的variables?

6 Solutions collect form web for “如何将传递给我的bash脚本的所有parameter passing给我的一个函数?”

Pet peeve:使用$@ ,你应该(几乎)总是把它放在双引号中,以避免误解参数与空格:

 abc "$@" 

我需要一个变化,我希望对其他人有用:

 function diffs() { diff "${@:3}" <(sort "$1") <(sort "$2") } 

"${@:3}"部分意味着从3开始的数组的所有成员。所以这个函数通过将前两个parameter passing给diff进行sorting然后将所有其他parameter passing给diff来实现一个sorting的diff,所以你可以与diff类似:

 diffs file1 file2 [other diff args, eg -y] 

使用$@variables,该variables扩展为以空格分隔的所有命令行参数。

 abc "$@" 

这是一个简单的脚本:

 #!/bin/sh args=("$@") echo Number of arguments: $# echo 1st argument: ${args[0]} echo 2nd argument: ${args[1]} 

$#是脚本收到的参数个数。 我发现使用数组更容易访问它们: args=("$@")行将所有参数放在args数组中。 要访问它们,请使用${args[index]}

值得一提的是,你可以用这个语法指定参数范围。

 function example() { echo "line1 ${@:1:1}"; #First argument echo "line2 ${@:2:1}"; #Second argument echo "line3 ${@:3}"; #Third argument onwards } 

我没有看到它提到。

 abc "$@" 

$@代表给你的bash脚本的所有参数。

  • 如何在同一行显示和更新回显
  • Bash:提取一部分string
  • 回应输出到stderr
  • Bash:执行前打印每个命令?
  • 如何在bash中创build一个等待Web服务器响应的循环?
  • -bash:./my_script:/ bin / bash ^ M:错误的解释器:没有这样的文件或目录
  • 如何沉默Bash脚本中的输出?
  • Bash:为每个目录