当用户FRUIT=apple
在 Unix shell 中输入时,如何分别从输入中获取名称FRUIT
和apple
输入FRUIT=apple
?
echo -e "\nEnter inputs here: \c"
read inputs
## user input "FRUIT=apple"
有没有办法从输入中获取部分文本?我们可以使用expr
命令来解决问题吗?如果是这样,怎么做?
你可以这样做,例如:
$ IFS== read -r key value
FRUIT=apple
$ echo "$key"
FRUIT
$ echo "$value"
apple
尝试使用cut
命令并将分隔符作为"="
. 右侧将是apple
,左侧将是FRUIT
。
cat file_name | cut -d "=" -f1
您可以expr
像这样使用正则表达式:
$ str='FRUIT=apple'
$ key=$(expr "$str" : '\([^=]*\)')
$ value=$(expr "$str" : '.*=\([^=]*\)')
$ echo "<$key> <$value>"
<FRUIT> <apple>
该表达式返回匹配的字符数,或者(如上所述)如果有一个捕获组,它将返回该捕获组。正则表达式以隐式锚点开头。expr string : regex
\(...\)
^
for 的表达式key
匹配第一个=
符号之前的所有内容;用于value
捕获(最后一个)=
符号之后的所有内容。
话虽这么说,expr
但当 shell 还不够强大,无法使用内置函数进行文本处理时,它是一种保留。任何现代外壳都可以做到。例如:
拆分=
并读取两个变量:
IFS='=' read -r key value <<< "$str"
使用参数扩展:
key=${str%=*}
value=${str#*=}