2012-01-13 140 views
1

我正在开发一个使用ash shell(而不是bash)的小脚本。shell脚本:如何从变量中只读取部分文本

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

VARIABLE = "number string status" 

其中数可以是任意数目(实际上是1和18之间,但在未来的数字可能更高)的字符串是一个名称和状态是或打开或关闭 名称通常只是小写字母。

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

我该如何获得?

回答

4

两种方式;一个是利用$IFS和使用while循环 - 这会为单行工作很愉快 - 如:

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

或者,使用cut如下:

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

如何使用cut

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

UPDATE

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

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

$(...)不知道灰。他们需要使用反引号。 – 2012-01-13 23:19:08

+0

你确定@ChrisJ?我检查了[wikipedia](http://en.wikipedia.org/wiki/Comparison_of_computer_shells#Inter-process_communication),它确实声明'ash'支持'命令替换'。 – 2012-01-14 02:20:25

+0

克里斯,与$()和$“..” – Ivan 2012-01-14 10:29:13

1

如何:

name=$(echo "$variable" | awk '{print $2}') 
1
#!/bin/sh 
myvar="word1 word2 word3 wordX" 
set -- $myvar 

echo ${15} # outputs word 15