2010-03-04 67 views
3

一个非常简单的shell脚本问题。我有一个这样的文件:Shell脚本 - 将子串保存到变量

var "aaaaa" 
var "bbbbb" 
... 

现在,我怎样才能将字符串中的引号分配给一个变量? 这就是我现在的(但我错过了分配部分...):

while read line 
do 
    echo $line | cut -d" " -f3 
done 

它打印我想要的东西......我怎么把它保存到一个变量?

谢谢

回答

7
my_var=$(echo $line | cut -d" " -f3) 

您需要执行的命令。这就是$()的用途。

+0

一般来说,你应该引用命令替换和变量扩展来保留空格:'my_var =“$(echo”$ line“| cut -d”“ - F3)“'。该命令已经在空格字符上分割,但保留制表符,换行符或可能在IFS中的任何其他内容也可能很重要。 – 2010-03-04 20:14:23

0

取决于壳。

Bourne和衍生物,你做

my_var_name=expression

C shell和衍生工具,你做

setenv my_var_name expression

如果你想保存一个命令的输出(如“切XYZ “),您使用反引号运算符作为您的表达式:

my_var_name=`echo $line | cut -d" " -f3` 

我认为,庆典也支持$(),但不知道从反引号的差别 - 见3.4.5从http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html

+0

。 你的意思是这样的:my_var = $ line | cut -d“”-f3 ?似乎没有工作。什么都不打印。 是的,将它们分配给每个循环中的相同变量将会很好。 – pns 2010-03-04 19:39:10

+0

@DVK:为什么'$()'? - http://mywiki.wooledge.org/BashFAQ/082 – 2010-03-05 11:13:27

1

您不必使用外部剪切命令来“剪切”您的字符串。你可以使用shell,它更高效。

while read -r a b 
do 
    echo "Now variable b is your quoted string and has value: $b" 
done <"file" 

或者

我使用bash
while read -r line 
do 
    set -- $line 
    echo $2 
done <"file"