【问题标题】:Can we set IFS to a range of numbers?我们可以将 IFS 设置为一个数字范围吗?
【发布时间】:2019-09-19 13:43:24
【问题描述】:

我知道我可以让用户使用常见的 IFS,如空格、逗号等,但我希望用户能够简单地输入他们的化学式(即 H2O)并将其拆分为元素和它们的数字。例如,如果 Na2V2O5 是他们的输入,我希望能够将这些信息存储如下:

元素1:Na 原子数:2

元素2:V 原子数:2

元素3:O 原子数:5

是否可以通过数字或甚至寻找大写字母来分隔事物?这是一个 bash 脚本。

【问题讨论】:

    标签: bash ifs


    【解决方案1】:

    是的。

    $ IFS=1234567890 read -a atoms <<< "Na2V2O5"
    $ declare -p atoms
    declare -a atoms=([0]="Na" [1]="V" [2]="O")
    

    但是,数字本身不会被保留;字段拆分器被简单地丢弃。

    忠告:不要尝试在 shell 中编写解析器。

    【讨论】:

    • 如果数字是两位数会怎样?让用户输入另一个常见的 IFS 会更好吗?
    • 两位数,你会得到一个空字段。 IFS 仅用于非常简单的解析。多个空格被视为单个分隔符的事实是一种特殊情况:“IFS 中不是 IFS 空格的任何字符,以及任何相邻的 IFS 空格字符,都会分隔一个字段。”
    • 我最终切换到让用户输入他们的公式,例如 Na:2,V:2,O:5。不是世界上最简单的输入,但它确实有效。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多