环境变量和函数参数

环境变量和函数参数

我有一组 bash 函数,其中包含详细级别选项。根据设定值,产生不同级别的输出。详细程度对于每个函数来说都是局部的。

但我也有环境变量。其中之一还指定了详细级别。它是一个专门用于影响新终端 shell 的全局详细工具。如果使用环境变量并将其设置为级别 1,则会打印可用终端命令的摘要。

假设使用详细位置参数调用函数,同时还设置了环境变量,大多数用户期望的行为是什么?强制执行本地详细程度设置,还是使用环境变量级别?

答案1

函数不是子 shell。您对函数中的变量所做的任何更改都将传播,除非您将它们附加local

您可以通过将函数括在括号中来使其成为子 shell()

在示例中test.sh

#!/bin/env bash

function amiasubshell {
    DISPLAY=$1
    echo amiasubshell: $DISPLAY
}

function nobuticanfakeit {
    local DISPLAY=$1
    echo nobuticanfakeit: $DISPLAY
}

echo main: $DISPLAY
amiasubshell :2
echo main: $DISPLAY
(amiasubshell :5)
echo main: $DISPLAY
nobuticanfakeit :28
echo main: $DISPLAY

第一个实例amiasubshell改变了主体中向前移动的值。第二个实例没有,因为它是一个子 shell。的实例nobuticanfakeit仅更改函数上下文中的值,因为它是local变量:

main: :0
amiasubshell: :2
main: :2
amiasubshell: :5
main: :2
nobuticanfakeit: :28
main: :2

相关内容