BAS*_*ASH 4 bash scripts functions
根据调用 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"
Run Code Online (Sandbox Code Playgroud)
那是因为命令替换,$()生成了一个子 shell,并且其中的命令在该子 shell 中运行。
因此,对任何数据结构所做的任何修改都不会传播到父 shell。换句话说,这些更改是在子 shell 中进行的,因此父 shell 的相关参数不会受到影响。
附带说明一下,当您执行脚本时,它会在子 shell 中运行;使所有参数更改在调用 shell 中可用的常见技巧是source(. ) 脚本。
例子:
$ foo() { bar=2 ;}
$ bar=1
$ $(foo)
$ echo "$bar"
1
$ foo
$ echo "$bar"
2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3064 次 |
| 最近记录: |