REPLY常用于此。它的使用read和select在bash,ksh并且zsh至少。
在zsh文档中:
REPLY
按照惯例保留此参数,以便在函数调用或重定向不可能或不可取的情况下,在 shell 脚本和 shell 内置程序之间传递字符串值。read 内置命令和 select 复杂命令可能会设置 REPLY,并且文件名生成在评估某些表达式时都会设置和检查其值。一些模块也出于类似目的使用 REPLY。回复
作为回复,但用于数组值而不是字符串。
但是,在更改该变量的类型时要注意潜在的影响。
另一种方法是将变量的名称作为参数传递:
get_date() {
local date
date=$(date)
eval "$1=\$date"
}
Run Code Online (Sandbox Code Playgroud)
如果get_date使用名为date. ksh93通过引入 namerefs 来解决这个问题,这是一种在调用者范围内引用变量的方法。bash最近添加了 nameref 支持,但它们引用同一范围内的变量(仅按名称),因此对此没有用。
function get_date {
typeset -n var=$1
var=$(date)
}
Run Code Online (Sandbox Code Playgroud)
在 中ksh93,即使称为 as 也能正常工作get_date var。有办法让它工作在bash,mksh并yash通过利用的漏洞unset,但我不会去那里的错误可以固定在未来。
另一种方法是不在您的函数中使用局部变量来设置除$1, $2... 位置参数之外的任意变量。但是,这可能会导致非常不可读的代码。例如,getopts_long参见shell 函数的实现。
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |