我的意思是:
scr.sh
采用位置参数的 bash 脚本#!/bin/bash echo "Params = $@" echo REMOTE_SERVER=${REMOTE_SERVER}
f
在另一个脚本中定义的 bash 函数scr2.sh
#!/bin/bash f() { REMOTE_SERVER=s001 scr.sh "${@}" }
我会先
$ source scr2.sh
然后f
可以在命令行调用,但不会留下我用REMOTE_SERVER
. 例如,我想要
$ f par1 par2
par1 par2
s001
$ echo REMOTE_SERVER=${REMOTE_SERVER}
REMOTE_SERVER=
(实际上,如果REMOTE_SERVER
在使用之前设置f
,我希望它保持该值)。我无法达到最后一个目标。我总是以REMOTE_SERVER
设置结束。我尝试使用用分号分隔的多行命令,f
用括号将命令括起来,但它不起作用。
我怎样才能做到这一点?
如果您只想为命令设置变量,请在命令前面加上赋值:
或者,使用函数的子shell(然后变量分配不会影响父shell)。您可以通过将命令包装在(括号)中来创建子shell
( ... )
,或者在函数体中使用括号而不是大括号。例如,使用:我的输出是:
使用
工作正常。这可能等同于公认的答案,具有额外的灵活性,可以将部分代码包含在本地 shell 内部和外部部分。