gpt4 book ai didi

bash - 如何在 Bash 中拆分字符串?

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

我有一个变量 x,其中包含类似“2025-12-13-04-32 Hello StackOverflow 程序员”的字符串。

我怎样才能像这样把它分成几个变量:

d=2015
m=12
dy=13
h=04
mi=32
t="Hello StackOverflow programmers"

最佳答案

read命令会做:

input='2025-12-13-04-32 Hello stackoverflow programmers'

IFS='- ' read -r d m dy h mi t <<<"$input"

注:<<<是所谓的here-string ,它允许通过标准输入提供一个常规的字符串 [变量],与多行 here-doc 相关(以例如 <<EOF 开头的内容)。这是 echo "$input" | IFS='- ' read ... 的更短、更高效的替代方案

  • IFS='- '导致 read 通过空格或 - 将输入行拆分为标记.
  • 尽管这通常也会破坏字符串 'Hello stackoverflow programmers'分成 3 个标记,它不在这里,因为 read将行的 remainder 分配给指定的 last 变量,以防没有足够的变量来匹配结果标记;因此,变量 $t收到'Hello stackoverflow programmers' , 根据需要。

打印结果,请使用以下命令:

注意 ${!name}variable indirection 的实例- 通过包含其名称 的另一个变量访问一个变量。

names=( d m dy h mi t )
for name in "${names[@]}"; do
printf '%s=%s\n' "$name" "${!name}"
done

这会产生:

d=2025
m=12
dy=13
h=04
mi=32
t=Hello stackoverflow programmers

关于方法选择的注释:

  • read非常适合基于一组文字分隔符的基于字段的解析(需要注意的是,非空白分隔符的 each 实例。计数)。
    • read -ra ,您甚至可以将所有标记读入一个数组,而无需事先知道标记的数量。
  • 为了更灵活的解析(基于已知数量的标记),考虑使用 =~使用正则表达式,如 Jahid's answer .

关于bash - 如何在 Bash 中拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35085896/

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