【问题标题】:BASH Accessing the next 'field' in command line without a loopBASH在没有循环的情况下访问命令行中的下一个“字段”
【发布时间】:2012-04-15 08:31:18
【问题描述】:

这似乎是一个愚蠢的问题,但我一直在寻找解决方案,但我一直没有想出一个解决方案。我有一个接受多个参数的脚本,我只是想知道如何拥有一个参数并访问下一个直接参数。我尝试过$i+1 之类的东西,但无济于事。下一个参数最终将保存一个目标目录,因此我需要能够访问内容。另请注意,我通过循环中迭代的计数器变量获取参数位置,这就是为什么我不能简单地说$2 或其他东西的原因。对于这样一个平凡的问题,我深表歉意。

【问题讨论】:

    标签: bash command-line-arguments field


    【解决方案1】:
    $ bash -c 'foo=1 ; echo ${@:$((foo+2)):1}' a b c d e f g
    d
    

    【讨论】:

    • 这成功了!你能解释一下回声后发生了什么吗?为什么我需要这么多$@?另外,冒号是做什么用的?和孤独的1?非常感谢!
    【解决方案2】:

    如果 i 是一个包含整数的变量,并且你想要 (i+1)st 参数,你可以这样做:

    eval arg=\$$(( i + 1 ))
    

    现在 arg 包含你想要的参数

    【讨论】:

      【解决方案3】:

      它可能不适用于您的情况,但如果您按顺序访问参数,则可以使用内置的 shift 命令来切换参数。

      不带参数执行shift 会将$1 设置为$2$2 设置为$3 等等,丢弃$1 的旧值。给shift 提供一个数字参数将移动这么多步骤。

      【讨论】:

        猜你喜欢
        • 2016-11-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多