gpt4 book ai didi

Bash 子字符串和参数扩展而不分配给变量

转载 作者:行者123 更新时间:2023-11-29 09:28:23 25 4
gpt4 key购买 nike

更新 2:这个问题与 this question 有关,可能是因为这可能/可能不起作用的根本原因是相同的。但我不确定它是否真的是重复的,因为嵌套只是如何在其中获取字符串的一个示例。同样的基本问题也可以改写为:

  • 有没有办法在参数扩展中直接使用字符串,可能使用expr
  • 将输出通过管道传递给参数扩展的最简洁方法是什么?

用于说明这些目标的“假”语法的更多示例...

${$(echo "b"; b="ABCDE")::3}  #  Assign output inside?
... | grep -o "ABCDE" | ${-::2} # pipe to placeholder inside?

因此,根据您的目标,它可能是骗局,也可能不是骗局。 无论如何,从目前的答案来看,这种方法听起来无论如何都是不可能的......


这是一个关于 bash 操作的一般性问题,而不是试图获取特定的字符串订阅...

我知道您可以使用参数扩展和其他技巧来提取或替换已定义变量的部分内容。

例如:

$ MYVAR=$(date)    # just to generate text; could be "ABCDE"
$ echo $MYVAR
Mon Oct 20 15:55:07 PDT 2014
$ echo ${MYVAR:11}
15:55:07 PDT 2014
$ echo ${MYVAR%:*}
Mon Oct 20 15:55

我想要的是一种无需创建中间变量即可“嵌套”这些操作的方法。

例如,当你这样做时你会得到什么:

$ TIME=${MYVAR:11}
$ echo ${TIME%:*}
15:55

我希望能够将 TIME 发生的操作嵌套在 MYVAR 发生的操作中。

我想到的潜在语法是类似于 $() 的语法,它让您嵌套操作,但对变量进行嵌套。它可能看起来像这样......(这不起作用 - 我试过了!)

echo ${`${MYVAR:11}`%:*}     # ERROR

这样做的好处是,您可以完全不用分配 MYVARTIME,而是使用字符串或 $(date)(或grep 等的输出)代替它。

最佳答案

首先,如果您真的想解析日期,您应该知道您可以从日期命令本身精确地获得您想要的日期格式:

$ read year month day < <(date '+%Y %m %d')
$ echo "year=$year month=$month day=$day"
year=2013 month=10 day=20

如果您使用的是 Linux,man date格式化细节。在其他操作系统(FreeBSD、OSX 等)中,date 命令是 strftime() 函数的包装器,因此您可以阅读 man page for that instead .

也就是说,您不一定需要使用 date 命令在 bash 中获取日期。如果您的 bash 版本是 4+,您可以 printf 日期格式而无需生成外部工具:

$ read year month day < <(printf '%(%Y %m %d)T')

但要回答您的问题,您可以在 zsh 中,但不能在 bash、ksh 或其他 Bourne shell 中。处理此问题的标准方法是使用临时变量,但请注意,您可以回收现有变量。

$ foo="Hello world."
$ foo="${foo//l/}"; echo "$foo"
Heo word.
$ foo="${foo:4}"; echo "$foo"
word.

关于Bash 子字符串和参数扩展而不分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com