3

我想通过unix脚本调用一个程序,它将是通用脚本,所以参数可以很。调用语句将类似于

<scriptname> <procedure name> <param1> <param2> <param3> <param4>.. so on

我需要的是从第二个命令行参数到最后一个参数我希望所有值都用逗号分隔,就像这样

<param1>,<param2>,<param3>,<param4>

我可以使用循环来执行此操作,即从第二个命令行参数开始,我将迭代每个参数并在其中添加逗号。我的问题是我可以用单个命令做到这一点吗?

注意: - 如果存在是命令行参数,则应正确处理空格,在最后一个参数之后不应有任何逗号

4

3 回答 3

6

"${*:2}"展开为从 $2 开始的参数列表,由 IFS 的第一个字符分隔:

saveIFS=$IFS
IFS=","
args="${*:2}"
IFS=$saveIFS
echo "$args"

请注意,这会正确保留参数中的空格,而不是将它们转换为逗号。

于 2012-12-18T12:22:59.813 回答
4

所有参数为$@. 您可以使用sed逗号替换空格,然后(或从开头,cut第一个字段)

echo $@ |  sed s/" "/,/g | cut -d "," -f2-

向前迈出一步,您可以将其分配给一个变量:

comma_separated_params=`echo $@ |  sed s/" "/,/g | cut -d "," -f2-`
于 2012-12-18T07:37:25.983 回答
1

下面的这种技术,在子shell中执行回显,允许您设置 IFS,然后让更改随着子shell消失

$ set -- "a b c" "d e f" "g h i"
$ with_comma=$(IFS=,; echo "$*")
$ echo "$with_comma"
a b c,d e f,g h i
于 2012-12-18T13:42:09.443 回答