如何传递参数以在bash脚本中起作用?


14

我想编写一个可以从带有许多不同变量的脚本中调用的函数。由于某些原因,我在执行此操作时遇到很多麻烦。我读过的示例始终仅使用全局变量,但就我所知,这不会使我的代码更具可读性。

预期的用法示例:

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
result=$para1 + $para2
}

add $var1 $var2
add $var3 $var4
# end of the script

./myscript.sh 1 2 3 4

我尝试$1在函数中使用诸如此类,但随后只需要调用整个脚本的全局范围即可。基本上,我正在寻找类似的东西$1$2诸如此类,但是在函数的本地上下文中。如您所知,函数可以使用任何适当的语言来工作。


在示例中使用$ 1和$ 2添加函数“ works”。尝试echo $1echo $2在其中。
Wieland

我的示例非常不完整,我做了很多更新。现在,afaik将不再起作用。
user181822 '16

替换为result = result=$(($1 + $2))然后添加echo $result,它可以正常工作,$ 1和$ 2是您的函数参数。
Wieland

Answers:


18

要使用参数调用函数:

function_name "$arg1" "$arg2"

该函数通过其位置(而不是名称)引用传递的参数,即$ 1,$ 2,依此类推。$ 0是脚本本身的名称。

例:

#!/bin/bash

add() {
    result=$(($1 + $2))
    echo "Result is: $result"
}

add 1 2

输出量

./script.sh
 Result is: 3

2
我现在意识到我的错误。我在函数中使用了$ 0和$ 1,而$ 0确实解析为脚本名称。我将其误认为脚本的参数而不是函数本身。谢谢!
user181822 '16

6

在主脚本中,$ 1,$ 2代表了您已经知道的变量。在下标或函数中,$ 1和$ 2将表示传递给函数的参数,作为此下标的内部(局部)变量。

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
  #Note the $1 and $2 variables here are not the same of the
  #main script... 
  echo "The first argument to this function is $1"
  echo "The second argument to this function is $2"
  result=$(($1+$2))
  echo $result

}

add $var1 $var2
add $var3 $var4
# end of the script


./myscript.sh 1 2 3 4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.