我有两个 shell 脚本,如下所示:
灰
tes=2
testfunction(){
tes=3
echo 5
}
testfunction
echo $tes
Run Code Online (Sandbox Code Playgroud)
b.sh
tes=2
testfunction(){
tes=3
echo 5
}
val=$(testfunction)
echo $tes
echo $val
Run Code Online (Sandbox Code Playgroud)
在第一个脚本中,tes
值是“3”,如预期,但在第二个脚本中,它是 2?
为什么它会这样?
是$(funcall)
创建一个新的子shell并执行该函数吗?如果是,如何解决这个问题?
小智 0
您当前的解决方案创建一个子 shell,该子 shell 将拥有自己的变量,该变量在终止时将被销毁。
解决这个问题的一种方法是将 tes 作为参数传递,然后使用 echo 返回*它。
tes=2
testfunction(){
echo $1
}
val=$(testfunction $tes)
echo $tes
echo $val
Run Code Online (Sandbox Code Playgroud)
您也可以使用该return
命令,尽管我建议不要这样做,因为它应该用于返回代码,因此范围仅限于 0-255。该范围之外的任何内容都将变为 0
要返回字符串,请执行相同的操作
tes="i am a string"
testfunction(){
echo "$1 from in the function"
}
val=$(testfunction "$tes")
echo $tes
echo $val
Run Code Online (Sandbox Code Playgroud)
i am a string
i am a string from in the function
Run Code Online (Sandbox Code Playgroud)
*并不真正返回它,它只是将其发送到子 shell 中的 STDOUT,然后将其分配给 val
归档时间: |
|
查看次数: |
13886 次 |
最近记录: |