如何在UNIX shell中的“ FRUIT = apple”中检索变量名“ apple”?

时间:2019-09-27 08:27:35

标签: linux shell unix expr

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

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

## user input "FRUIT=apple"

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

3 个答案:

答案 0 :(得分:2)

您可以这样操作,例如:

$ IFS== read -r key value
FRUIT=apple
$ echo "$key"
FRUIT
$ echo "$value"
apple

答案 1 :(得分:2)

尝试使用cut命令并将定界符作为"="传递。相同的右侧为apple,左侧为FRUIT

cat file_name | cut -d "=" -f1

答案 2 :(得分:2)

您可以将expr与正则表达式结合使用,例如:

$ str='FRUIT=apple'
$ key=$(expr "$str" : '\([^=]*\)')
$ value=$(expr "$str" : '.*=\([^=]*\)')
$ echo "<$key> <$value>"
<FRUIT> <apple>

表达式expr string : regex返回匹配的字符数,或者(如上所述),如果有捕获组\(...\),它将返回该捕获组。正则表达式以隐式^锚开头。

key的表达式将所有内容匹配到第一个=为止; value的那个捕获了(最后一个)=符号之后的所有内容。


所有这些,expr是shell不够强大以无法使用内置函数进行文本处理时的停留时间;任何现代外壳都可以做到。例如:

  • 分解=并读入两个变量:

    IFS='=' read -r key value <<< "$str"
    
  • 使用参数扩展:

    key=${str%=*}
    value=${str#*=}