我试图弄清楚如何在函数调用链中保留原始参数 例如,考虑以下情况:
#!/usr/bin/ksh
function foo1
{
print "$#"
print "$@"
# Call to some other script which expect
# same arguments as foo3
# ./some_ksh_script "$@"
}
function foo2
{
print "$#"
print "$@"
backup_arg="$@"
# Process arguments
foo1 $backup_arg
}
function foo3
{
print "$#"
print "$@"
backup_arg="$@"
# Process arguments
foo2 $backup_arg
}
foo3 "$@"
输出 -
vikram@vikram-VirtualBox ~ $ ./test.sh 1 "2 3 4" 5
3
1 2 3 4 5
5
1 2 3 4 5
5
1 2 3 4 5
看起来我在备份参数时丢失了原始参数
脚本some_ksh_script
应获得3个参数1
,2 3 4
,5
,但获得5个。
我有什么方法可以保留原始论点吗?
答案 0 :(得分:0)
在经典sh
中,只有一个数组(由set
设置或作为参数传递,并使用$1
,$2
等编制索引。如果你需要操纵参数,它们就会被销毁,但是破坏是本地的。所以也许你想要这样的东西:
!/bin/sh
foo1() {
echo foo1 passed $# args
}
foo2() {
echo foo2 passed $# args
}
process_args() {
func=$1
shift
set $* # Flatten the arg list
args=$*
$func $args
}
foo3() {
echo foo3 passed $# args
process_args foo2 "$@"
echo foo3 still has $# args
process_args foo1 "$@"
}
foo3 "$@"
在这里,您需要使用参数"$@"
直接从foo3调用foo2。关键是process_args
可以替换当前正在执行的任何破坏数组的操作,当该函数返回并在foo3中继续处理时,它将被替换。