gpt4 book ai didi

bash - Shell脚本中函数参数的赋值

转载 作者:行者123 更新时间:2023-11-29 09:21:03 25 4
gpt4 key购买 nike

我最近开始学习编写 Shell 脚本,令我困惑的一件事是参数分配的顺序。

这是我混淆的代码

#!/bin/bash
Expression()
{
local num3=$1
local num4=$2
local num5=$3
local sum=$(((num3-num4)+num5))
echo $sum
}
num1=5
num2=3
num3=7
sum=$(Expression num1 num2 num3)
echo "The result is $sum"

而不是让输出为

The result is 9

因为 5-3+7=9

我明白了

The result is 7

有人能解释一下吗?

最佳答案

问题出在表达式上

sum=$(Expression num1 num2 num3)

num1num2num3文字 值作为字符串传递的位置。在示例中,这些变量不是作为已定义值的占位符传递的,而是作为原始字符串传递的。

您需要将它们作为包含这些值的实际占位符传递,方法是在变量名前放置一个 $

sum=$(Expression "$num1" "$num2" "$num3")

我想您做出的错误决定是,bash 中的算术运算符 $((..)) 构造允许您访问变量而无需 $ 前缀。但是对于命令替换语法,$(..) 要求变量名称以 $ 为前缀,否则只有文字值会被传递,正如您在此处看到的那样。

至于值7,显然num3 在函数内部定义为全局和本地。所以它的值是 5,所以操作 5-3+5 是在你期望的 5-3+7 上执行的。

关于bash - Shell脚本中函数参数的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52602465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com