我有一个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并将其传递给另一个应用程序/进程。
有人可以告诉我如何在这种情况下获得相同的行为,就好像我们正在使用" $ @"
提前感谢您的帮助。
答案 0 :(得分:0)
我正在使用 ksh93 ,但它应该在 ksh88 中工作,并且它还有数组:
set -A VARGS "$@"
IFS=
for i in ${VARGS[@]}; do
echo "$i"
done
设置IFS=
是必要的,否则“这是一条消息”字符串会被空格切断。