Shell 在获取参数接受配置文件后恢复unix命令行参数

Shell 在获取参数接受配置文件后恢复unix命令行参数,shell,unix,Shell,Unix,平台包括AIX7.1和HP-UX安腾11.31、KornShell。我们的大多数脚本源于一个主配置文件,用于设置所需的环境变量。新的要求是从主配置文件中选择另一个配置文件。第二个概要文件需要接受参数。不幸的是,当我们获取第二个概要文件时,存储原始命令行参数的系统变量$*被覆盖。例如: 无需第二个配置文件即可调用:./script my original parms 主配置文件不提供第二个配置文件。 $*包含我的原始参数。我们这里很好 使用第二个配置文件的源调用:./script my secon

平台包括AIX7.1和HP-UX安腾11.31、KornShell。我们的大多数脚本源于一个主配置文件,用于设置所需的环境变量。新的要求是从主配置文件中选择另一个配置文件。第二个概要文件需要接受参数。不幸的是,当我们获取第二个概要文件时,存储原始命令行参数的系统变量$*被覆盖。例如:

无需第二个配置文件即可调用:./script my original parms 主配置文件不提供第二个配置文件。 $*包含我的原始参数。我们这里很好

使用第二个配置文件的源调用:./script my second original parms 主配置文件源第二个配置文件为:/第二个配置文件第二个配置文件参数 $*包含第二个配置文件参数。哦


因此,在主脚本调用的第二个版本中,我们实际上丢失了我的第二个原始parms。我们是否有办法保存/恢复这些原始参数,或者在获取第二个配置文件后通过其他方法引用它们?

在您需要存储参数的地方。使用数组:

set -A params "$@"
使用$@而不是$*,这一点很重要-前者将保留任何带有空格的参数

要恢复位置参数,请执行以下操作:

set -- "${params[@]}"
./script "$@"

在调用第二个脚本之前,是否可以将$*分配给另一个变量,然后改用该变量?请记住,在代码中的任何地方,都可以使用set-arg1 arg2重置$*值。。现在shell arg$1将等于arg1,等等。Good luck.set-params$@dit对我不起作用,但是params=$@起作用了。您的shell是什么?那么您应该使用常规数组:params=$@。在bash中,-A是set的无效选项。根据问题的要求,我的答案是ksh。所以,如果你是我的反对者,你可能想重新考虑一下。