在解释我的 bash 问题之前,让我给你一些背景信息:
我正在使用我们在当前工作中使用的 bash“框架”编写一些脚本。该框架的一个特点是初始化一组环境变量,这些变量对在我们的集群基础设施上运行作业很有用。
这些变量取决于由 指定的日期$YY
,它们也是环境变量(是的,这是连线的)$mm
。$dd
要使用该框架,您首先定义日期,然后调用一个函数来初始化其他变量。当您编写仅需要特定日期变量的脚本时,这可以正常工作。今天我正在写一些需要变量 2 天的东西。写这篇我面临一个奇怪的问题。为了让您更好地理解问题,我编写了这段代码来模拟它:
#!/bin/bash
function assign(){
date=$1
date[1]=$YY
date[2]=$mm
date[3]=$dd
}
function display() {
date=$1
echo "${date[1]}/${date[2]}/${date[3]}"
}
export YY=2012
export mm=09
export dd=20
declare -a my_date1=()
assign $my_date1
export YY=2012
export mm=08
export dd=20
declare -a my_date2=()
assign $my_date2
display $my_date1
display $my_date2
预期的输出是:
2012/09/20
2012/08/20
但输出是:
2012/08/20
2012/08/20
起初我认为 assign 函数使用引用填充数组$YY
,$mm
而$dd
不是它们的值。但后来我尝试使用以下代码,它不会改变结果。
date[1]=$(echo $YY)
date[2]=$(echo $mm)
date[3]=$(echo $dd)
有人可以解释一下附加什么吗?也许有些东西与date=$1
......