在 ksh shell 脚本中考虑临时变量后解析参数
Posted
技术标签:
【中文标题】在 ksh shell 脚本中考虑临时变量后解析参数【英文标题】:Parsing arguments after taking into a temp variable in ksh shell scripting 【发布时间】:2015-05-31 17:32:41 【问题描述】:我有一个如下的 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。 我在临时变量中采用参数的原因是从中删除一些不需要的参数并将其传递给另一个应用程序/进程。
有人可以告诉我如何在这种情况下获得与使用“$@”相同的行为
提前感谢您的帮助。
【问题讨论】:
您需要使用数组来保存您的参数。如果您的ksh
版本不支持数组变量,那么您可能需要手动查找要避免的值的索引并使用$@:offset:length
语法手动调用第二个命令(即使没有通用数组变量也应该存在我认为)。
【参考方案1】:
我正在为此使用 ksh93,但它应该可以在 ksh88 中工作,并且它也有数组:
set -A VARGS "$@"
IFS=
for i in $VARGS[@]; do
echo "$i"
done
设置IFS=
是必要的,否则“这是一条消息”字符串会被空格分割。
【讨论】:
以上是关于在 ksh shell 脚本中考虑临时变量后解析参数的主要内容,如果未能解决你的问题,请参考以下文章
孤儿(ksh Shell 脚本未在 CTRL-X 上首先终止)