【发布时间】:2012-01-13 23:10:20
【问题描述】:
我正在使用 ash shell(不是 bash)开发一个小脚本。
现在我有一个具有以下组成的变量:
VARIABLE = "number string status"
其中 number 可以是任何数字(实际上介于 1 和 18 之间,但将来该数字可能更高)字符串是名称,状态是或 on 或 off 名称通常只有小写字母。
现在我的问题是只读取变量中的字符串内容,去掉数字和状态。
我怎样才能得到它?
【问题讨论】:
我正在使用 ash shell(不是 bash)开发一个小脚本。
现在我有一个具有以下组成的变量:
VARIABLE = "number string status"
其中 number 可以是任何数字(实际上介于 1 和 18 之间,但将来该数字可能更高)字符串是名称,状态是或 on 或 off 名称通常只有小写字母。
现在我的问题是只读取变量中的字符串内容,去掉数字和状态。
我怎样才能得到它?
【问题讨论】:
两种方式;一种是利用$IFS 并使用while 循环——这将很高兴地适用于单行——如:
echo "Part1 Part2 Part3" | while read a b c
do
echo $a
done
或者,使用cut,如下所示:
a=`echo $var | cut -d' ' -f2`
echo $a
【讨论】:
用cut怎么样?
name=$(echo "$variable" | cut -d " " -f 2)
更新
显然,Ash 不明白$(...)。希望您可以这样做:
name=`echo "$variable" | cut -d " " -f 2`
【讨论】:
ash 支持command substitution。
$(...) 抛出了一个错误,而反引号没有。它今天早上工作。如果我知道发生了什么,该死的。 {困惑}
怎么样:
name=$(echo "$variable" | awk '{print $2}')
【讨论】:
#!/bin/sh
myvar="word1 word2 word3 wordX"
set -- $myvar
echo ${15} # outputs word 15
【讨论】: