【问题标题】:Shell script: how to read only a portion of text from a variableShell脚本:如何从变量中仅读取部分文本
【发布时间】:2012-01-13 23:10:20
【问题描述】:

我正在使用 ash shell(不是 bash)开发一个小脚本。

现在我有一个具有以下组成的变量:

VARIABLE = "number string status"

其中 number 可以是任何数字(实际上介于 1 和 18 之间,但将来该数字可能更高)字符串是名称,状态是或 on 或 off 名称通常只有小写字母。

现在我的问题是只读取变量中的字符串内容,去掉数字和状态。

我怎样才能得到它?

【问题讨论】:

    标签: shell ash


    【解决方案1】:

    两种方式;一种是利用$IFS 并使用while 循环——这将很高兴地适用于单行——如:

    echo "Part1 Part2 Part3" | while read a b c
    do
        echo $a
    done
    

    或者,使用cut,如下所示:

    a=`echo $var | cut -d' ' -f2`
    echo $a
    

    【讨论】:

      【解决方案2】:

      cut怎么样?

      name=$(echo "$variable" | cut -d " " -f 2)
      

      更新

      显然,Ash 不明白$(...)。希望您可以这样做:

      name=`echo "$variable" | cut -d " " -f 2`
      

      【讨论】:

      • $(...) 不知道灰烬。他们需要使用反引号。
      • 你确定@ChrisJ 吗?我检查了wikipedia,它确实声明ash 支持command substitution
      • 我可以发誓我昨晚试过这个,$(...) 抛出了一个错误,而反引号没有。它今天早上工作。如果我知道发生了什么,该死的。 {困惑}
      【解决方案3】:

      怎么样:

      name=$(echo "$variable" | awk '{print $2}')
      

      【讨论】:

        【解决方案4】:
        #!/bin/sh
        myvar="word1 word2 word3 wordX"
        set -- $myvar
        
        echo ${15}    # outputs word 15
        

        【讨论】:

          猜你喜欢
          • 2014-03-29
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 2016-07-09
          • 1970-01-01
          • 2018-04-12
          相关资源
          最近更新 更多