我想通过unix脚本调用一个过程,它将是通用脚本,所以参数可以非常。调用语句将是类似
的内容<scriptname> <procedure name> <param1> <param2> <param3> <param4>.. so on
我需要的是从第二个命令行参数到最后一个参数我希望所有值逗号分别是这样的
<param1>,<param2>,<param3>,<param4>
我可以使用循环执行此操作,即来自第二个命令行参数我将迭代每个参数并在其中添加逗号。我的问题是我可以用单一命令做到吗?
注意: - 如果存在命令行参数,则应正确处理空格,最后一个参数后不应有任何逗号
答案 0 :(得分:4)
所有参数均为$@
。您可以使用sed
用逗号替换空格,然后(或从开始,cut
第一个字段)
echo $@ | sed s/" "/,/g | cut -d "," -f2-
向前迈出一步,您可以将其分配给变量:
comma_separated_params=`echo $@ | sed s/" "/,/g | cut -d "," -f2-`
答案 1 :(得分:4)
"${*:2}"
扩展为以$ 2开头的参数列表,以IFS的第一个字符分隔:
saveIFS=$IFS
IFS=","
args="${*:2}"
IFS=$saveIFS
echo "$args"
请注意,这会在参数中正确保留空格,而不是将它们转换为逗号。
答案 2 :(得分:1)
下面的这个技术,在子shell中执行echo,允许你设置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