,當我寫的東西是這樣的:擊是什麼的grep的返回值和削減
x = `grep "#include $1 | cut -f2"`
或使用grep任何用途,切,如:
x = `grep string file.c`
我不如果x
理解是一個數組還是一個長字符串?因爲當我寫
echo ${#x[*]}
它打印1
,但我可以這樣寫:
for d in `grep....`
,因爲它是一個數組,請解釋。
,當我寫的東西是這樣的:擊是什麼的grep的返回值和削減
x = `grep "#include $1 | cut -f2"`
或使用grep任何用途,切,如:
x = `grep string file.c`
我不如果x
理解是一個數組還是一個長字符串?因爲當我寫
echo ${#x[*]}
它打印1
,但我可以這樣寫:
for d in `grep....`
,因爲它是一個數組,請解釋。
它給你一個單一的長字符串。這不稱爲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
如果在循環引用,不會發生在空間分割。
所以x包含新行?例如,如果你有一個文件a。有兩行的txt:1.include b和第二行2.包含d。你寫了x = $(grep #include $ 1 | cut -f2),你將會有2行:a和b或者一行:「a b」? – user3748682
你爲什麼不嘗試它? (這是兩行) –
x
是一個字符串。
在你的例子for
循環通過單詞。
哦我的意思是反引號,但不知何故,它忽略了它們。 – user3748682
使用$(...)代替反引號。有幾個原因,其中包括一些程序以意想不到的方式解釋反引號 –
@Bushmills:對。但程序不會看到反引號(除非轉義)。 bash看到它。 –