-1

当用户FRUIT=apple在 Unix shell 中输入时,如何分别从输入中获取名称FRUITapple输入FRUIT=apple

echo -e "\nEnter inputs here: \c"
read inputs

## user input "FRUIT=apple"

有没有办法从输入中获取部分文本?我们可以使用expr命令来解决问题吗?如果是这样,怎么做?

4

3 回答 3

2

你可以这样做,例如:

$ IFS== read -r key value
FRUIT=apple
$ echo "$key"
FRUIT
$ echo "$value"
apple
于 2019-09-27T08:34:01.540 回答
2

尝试使用cut命令并将分隔符作为"=". 右侧将是apple,左侧将是FRUIT

cat file_name | cut -d "=" -f1
于 2019-09-27T12:29:41.643 回答
2

您可以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#*=}
    
于 2019-09-27T13:36:23.960 回答