【问题标题】:bash substring of command instead of variable?命令的bash子字符串而不是变量?
【发布时间】:2018-11-22 23:30:00
【问题描述】:

我可以在 bash 中做到这一点:

foo=bar
echo ${foo:0:2}

打印“ba”(“bar”的前两个字符)。

现在我想对脚本/命令输出而不是变量执行相同的操作,如下所示:

echo ${$(date):0:10}

然后我得到一个错误:“错误替换”。

当然我可以使用中间变量:

foo=$(date)
echo ${foo:0:10}

但是有没有办法直接做到这一点?

附: date 命令只是一个例子,这不是关于以特定格式生成一些日期字符串。只是从任意 shell 命令输出中获取子字符串的一般概念。

【问题讨论】:

  • 没有 BASH 语法不允许任何类型的嵌套。
  • 明确一点,date 在这里只是一个示例命令,不是问题的重点?
  • @chepner 是的,date 只是用于说明目的的随机命令。

标签: bash shell variables substring


【解决方案1】:

不,BASH 语法不允许任何类型的嵌套。您可以使用cut 等外部实用程序来执行此操作:

date | cut -c 1-10

Wed Jun 13

【讨论】:

    【解决方案2】:

    替换date:

    $ date
    Wed Jun 13 14:57:38 EEST 2018
    

    你可以使用printf:

    $ printf "%(%a %b %d%n)T"
    Wed Jun 13
    

    man strftime 获取更多格式修饰符。

    【讨论】:

      【解决方案3】:

      如果您想要今天日期的输出 Wed Jun 13(这是),那么

      $ date +'%a %b %e'
      Wed Jun 13
      

      请参阅您系统上date 和/或strftime 的手册。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-07
        • 2016-05-19
        • 2012-11-29
        • 1970-01-01
        • 2023-01-12
        • 2014-12-06
        • 2020-09-15
        相关资源
        最近更新 更多