2010-03-04 65 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"