2014-07-19 42 views
0

,當我寫的東西是這樣的:擊是什麼的grep的返回值和削減

x = `grep "#include $1 | cut -f2"` 

或使用grep任何用途,切,如:

x = `grep string file.c` 

我不如果x理解是一個數組還是一個長字符串?因爲當我寫

echo ${#x[*]} 

它打印1,但我可以這樣寫:

for d in `grep....` 

,因爲它是一個數組,請解釋。

+0

哦我的意思是反引號,但不知何故,它忽略了它們。 – user3748682

+0

使用$(...)代替反引號。有幾個原因,其中包括一些程序以意想不到的方式解釋反引號 –

+0

@Bushmills:對。但程序不會看到反引號(除非轉義)。 bash看到它。 –

回答

0

它給你一個單一的長字符串。這不稱爲grep或cut的「返回值」,而是「標準輸出」(它們打印的文本,您用反引號捕獲或可能更清晰地使用$(...))。

這裏發生的事情是,你得到一個單一的字符串,甚至可能在內部換行符,然後用你的for d in ...迭代它。在Bash中,遍歷一個字符串在空格上分割,所以每個單詞都會得到一個d值。試試這個,看看它在行動,再加上一種方法來避免它:

x="foo bar baz" 
for d in $x; do echo $d; done 
for d in "$x"; do echo $d; done 

如果在循環引用,不會發生在空間分割。

+0

所以x包含新行?例如,如果你有一個文件a。有兩行的txt:1.include b和第二行2.包含d。你寫了x = $(grep #include $ 1 | cut -f2),你將會有2行:a和b或者一行:「a b」? – user3748682

+0

你爲什麼不嘗試它? (這是兩行) –

0

x是一個字符串。

在你的例子for循環通過單詞