当用户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#*=}