gpt4 book ai didi

bash - 如何区分函数参数和脚本参数

转载 作者:行者123 更新时间:2023-12-05 05:59:51 24 4
gpt4 key购买 nike

假设我有一个名为 hello 的脚本

$ cat hello
function1 () {
echo $1
}
function1 what
echo $1

我打电话

$ sh hello chicken
what
chicken

我如何引用函数内的脚本参数(鸡)。我是否必须重命名所有脚本参数或将它们存储在其他地方?处理此问题的最佳方法是什么?

最佳答案

这是一个阴影案例,您可以在下面找到相关信息 https://www.gnu.org/software/bash/manual/html_node/Shell-Functions.html

如果您尝试描绘它,内部范围变量会在外部范围变量上转换“阴影”并将其隐藏起来。一旦内部作用域变量消失,程序就可以再次“找到”外部作用域变量。

这几乎是编程中一般规则的另一种变体,其中更具体或引用内部范围的事物会覆盖更通用或外部范围的一部分的事物。

如果你写了

temp="hi"
phrase(){
echo "$temp"
temp="hello"
echo "$temp"
}
phrase

结果是

hi
hello

因为内部作用域的变量“掩盖”了外部作用域的变量。

这可以通过使用另一个名称存储脚本的 $1 参数来避免。因此,正如您所说,最好的方法是通过将脚本参数存储在明确命名的变量中来确保所有变量都具有不同的名称。

temp=$1
function1 () {
echo "$1"
echo "$temp"
}
function1 what
echo "$1"

编辑:我忘了说明脚本变量不能直接在函数内部使用的事实,就像@gordondavisson 所说的那样,所以即使您没有将“what”这个词作为参数传递给您的函数,您仍然不会'无法打印“chicken”这个词。因此,在这种情况下,在函数内部使用参数的唯一可能方法是将 $1 分配给一个变量。

关于bash - 如何区分函数参数和脚本参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67929535/

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