请注意,我说的是将参数通过引用传递给脚本,而不是函数。我已经检查了here和here,它们讨论了使用函数传递参数。
我想要的是调用一个脚本,向它传递一个参数,并使参数成为shell中的一个变量,并在脚本中赋值(这正是read RESPONSE
命令所发生的情况,其中RESPONSE成为当前shell中的一个变量,并由read
命令赋值)。
我知道使用这样的函数(使用local -n
):
#!/bin/bash
function boo() {
local -n ref=$1
ref="new"
}
SOME_VAR="old"
echo $SOME_VAR
boo SOME_VAR
echo $SOME_VAR
字符串
或者像这样(使用eval
):
function booeval() {
ref=$1
eval $(echo $ref=\"new\")
}
SOME_VAR="old"
echo $SOME_VAR
booeval SOME_VAR
echo $SOME_VAR
型
工作如预期。但是local
(或declare
/typedef
)不能在函数之外工作,而eval
似乎运行在一个子shell中,当脚本结束时,变量在shell中无法生存。我想要这样的东西:
$ cat /tmp/test.sh
#!/bin/bash
ref=$1
eval $(echo "export $ref=\"new value\"")
$ /tmp/test.sh VAR
$ echo $VAR
$
型
有什么想法吗
1条答案
按热度按时间72qzrwbm1#
您肯定知道,在子shell中分配的内容将保留在子shell中。
正如注解中所指出的,一种解决方案是没有子shell:如果脚本是
source
d,则将保留赋值。然而,这需要小心地编写脚本,以免产生不必要的副作用。如果正常调用脚本(作为子shell),您可能能够解决复杂的IPC传递值的问题,但在我看来,您可以通过简单地让脚本输出值而不是试图将其分配给任何东西来完全绕过复杂性:
字符串
您可以使用第一种方法 Package 它,以便可以传入变量名称:
型
举例来说:
型