我有一个shell脚本如下:

$ cat check.sh

    echo "$@"
    for i in "$@"; 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

到现在为止一切都很好。--显示的参数数为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。
我获取临时变量中的参数的原因是从中删除一些不需要的参数,并将其传递给另一个应用程序/进程。
有人能让我知道如何在这个场景中获得与我们使用“$”相同的行为吗?
提前谢谢你的帮助。

最佳答案

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

set -A VARGS "$@"

IFS=

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

设置IFS=是必要的,否则“this is a message”字符串将在空格上切碎。

关于linux - 在ksh Shell脚本中将临时变量纳入参数后解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29299834/

10-14 16:08
查看更多