以下代码的工作方式取决于 Parse_Short_Switches() 的调用方式。使用 result=$(Parse_Short_Switches) 调用函数“Parse_Short_Switches”后,$error_flag 的值并未像我预期的那样设置为 -1。
仅使用 Parse_Short_Switches 调用函数“Parse_Short_Switches”之后,$error_flag 的值就会像我预期的那样设置为 -1。
任何帮助都将不胜感激。谢谢
#!/bin/bash
function Parse_Short_Switches()
{
echo "error_flag inside of the function= $error_flag" 1>&2
error_flag="-1"
echo "blah blah ..."
}
# --- MAIN ---
error_flag="999"
echo "error_flag= $error_flag"
#result=$(Parse_Short_Switches)
Parse_Short_Switches
echo "error_flag= $error_flag"
答案1
这是因为命令替换$()
会生成一个子 shell,并且里面的命令在该子 shell 中运行。
因此对任何数据结构所做的任何修改都不会传播到父 shell。换句话说,更改确实在子 shell 中进行,因此父 shell 的相关参数不会受到影响。
附注:当您执行脚本时,它会在子 shell 中运行;使所有参数更改在调用 shell 中可用的常见技巧是source
( .
) 脚本。
例子:
$ foo() { bar=2 ;}
$ bar=1
$ $(foo)
$ echo "$bar"
1
$ foo
$ echo "$bar"
2