【发布时间】:2019-09-19 13:43:24
【问题描述】:
我知道我可以让用户使用常见的 IFS,如空格、逗号等,但我希望用户能够简单地输入他们的化学式(即 H2O)并将其拆分为元素和它们的数字。例如,如果 Na2V2O5 是他们的输入,我希望能够将这些信息存储如下:
元素1:Na 原子数:2
元素2:V 原子数:2
元素3:O 原子数:5
是否可以通过数字或甚至寻找大写字母来分隔事物?这是一个 bash 脚本。
【问题讨论】:
我知道我可以让用户使用常见的 IFS,如空格、逗号等,但我希望用户能够简单地输入他们的化学式(即 H2O)并将其拆分为元素和它们的数字。例如,如果 Na2V2O5 是他们的输入,我希望能够将这些信息存储如下:
元素1:Na 原子数:2
元素2:V 原子数:2
元素3:O 原子数:5
是否可以通过数字或甚至寻找大写字母来分隔事物?这是一个 bash 脚本。
【问题讨论】:
是的。
$ IFS=1234567890 read -a atoms <<< "Na2V2O5"
$ declare -p atoms
declare -a atoms=([0]="Na" [1]="V" [2]="O")
但是,数字本身不会被保留;字段拆分器被简单地丢弃。
忠告:不要尝试在 shell 中编写解析器。
【讨论】:
IFS 仅用于非常简单的解析。多个空格被视为单个分隔符的事实是一种特殊情况:“IFS 中不是 IFS 空格的任何字符,以及任何相邻的 IFS 空格字符,都会分隔一个字段。”