首页 文章

如何将传递给我的bash脚本的所有参数传递给我的函数?

提问于
浏览
441

假设我已经定义了 function abc() ,它将处理与分析传递给我的脚本的参数相关的所有逻辑 .

如何将我的bash脚本收到的所有参数传递给它? params的数量是可变的,所以我不能像这样硬编码传递的参数:

abc $1 $2 $3 $4

Edit . 更好的是,我的函数有没有办法访问脚本参数的变量?

7 回答

  • 40

    使用 $@ 变量,该变量扩展为由空格分隔的所有命令行参数 .

    abc "$@"
    
  • 15

    我需要对此进行修改,我希望这对其他人有用:

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

    "${@:3}" 部分表示从3开始的数组的所有成员 . 因此,此函数通过将前两个参数传递给diff通过sort然后将所有其他参数传递给diff来实现排序的diff,因此您可以类似于diff调用它:

    diffs file1 file2 [other diff args, e.g. -y]
    
  • 0
    abc "$@"
    

    $@ 表示为bash脚本提供的所有参数 .

  • 47

    abc "$@"一般是正确的答案 . 但我试图将参数传递给su命令,并且没有任何引用可以阻止错误 su: unrecognized option '--myoption' . 实际上对我有用的是将所有参数作为单个字符串传递:

    abc "@*"
    

    我确切的情况(我确定其他人需要这个)在我的.bashrc中

    # run all aws commands as Jenkins user
    aws ()
    {
        sudo su jenkins -c "aws $*"
    }
    
  • 124

    这是一个简单的脚本:

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

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

  • 714

    宠儿小便:当使用 $@ 时,你应该(几乎)总是把它放在双引号中,以避免错误地使用空格中的参数:

    abc "$@"
    
  • 28

    值得一提的是,您可以使用此语法指定参数范围 .

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

    我没有看到它提到过 .

相关问题