在ksh shell脚本中接受临时变量后解析参数

时间:2015-03-27 11:39:19

标签: linux shell variables command arguments

我有一个shell脚本如下:

$ cat check.sh  

    echo "$@"  
    for i in "$@"; do  
        echo "$i"  
    done   

如果我使用命令行args运行脚本,它将打印如下:

$ ./check.sh arg1 arg2 "This is a message" arg4  

arg1 arg2 This is a message arg4  
arg1  
arg2
This is a message  
arg4  

直到现在一直都很好.. - 显示的参数数量为4

如果我将$@带入变量并对其执行相同操作,则其行为如下:

$ cat check.sh  

    VARGS="$@"  
    echo "$VARGS"  
    for i in $VARGS; do  
        echo "$i"  
    done  


$ ./check.sh arg1 arg2 "This is a message" arg4

arg1 arg2 This is a message arg4   
arg1  
arg2  
This  
is  
a  
message  
arg4  

这里参数的数量是7 我在temp变量中使用参数的原因是从中删除一些不需要的args并将其传递给另一个应用程序/进程。

有人可以告诉我如何在这种情况下获得相同的行为,就好像我们正在使用" $ @"

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我正在使用 ksh93 ,但它应该在 ksh88 中工作,并且它还有数组:

set -A VARGS "$@"

IFS=

for i in ${VARGS[@]}; do
    echo "$i"
done

设置IFS=是必要的,否则“这是一条消息”字符串会被空格切断。