【问题标题】:Adding comma between command line parameter在命令行参数之间添加逗号
【发布时间】:2012-12-18 07:24:38
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: oracle bash shell unix scripting


    【解决方案1】:

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

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

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

    【讨论】:

    • 有趣,来自我的 +1。很高兴知道。
    【解决方案2】:

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

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

    向前一步,你可以把它赋给一个变量:

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

    【讨论】:

    • 这会将参数中的空格也转换为逗号,如果第一个参数包含空格或逗号,则会在错误的位置剪切。
    【解决方案3】:

    下面的这种技术,在子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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多