這是這條線。
variable=`ls -A $1 | grep '[abc]'; ls -1 $1`
我理解分號之前的行,但我不明白分號之後的這一行是如何運作的。可以
after the command(variable assignment)
and then run the command after semi-colon?
那麼下面的行會是相同的嗎?
variable=`ls -A $1 | grep '[abc]' | ls -1 $1`
謝謝,
答案1
分號只是分隔兩個連續的命令。線上說明頁 ( man bash
) 說(在章節中清單):
命令之間用 ; 分隔依序執行
例如以下填充先執行命令foo
,然後執行命令bar
。
foo; bar
要正確解析您的範例,您首先必須建立它的分層模型:
variable=`ls -A $1 | grep '[abc]'; ls -1 $1`
可以分解為 (反引號內的東西)和(反引號內的東西)。variable=
...
ls -A $1 | grep '[abc]'; ls -1 $1
反引號用於取得指令的輸出(請參閱命令替換在man bash
);所以你將整體的輸出分配ls -A $1 | grep '[abc]'; ls -1 $1
給變數。
替換命令的輸出是匹配特定模式(包括隱藏的希爾德斯)的文件列表,附加完整的文件列表(無論可用於什麼...)
答案2
不,它們不一樣,後者會通過管道grep
進入ls
(這幾乎肯定不是您想要的)。分號只是分隔兩個不同的指令。
首先,您可能想開始使用更新、更靈活$( ... )
而不是反引號。
以此為例:
$ var=`echo foo; echo bar`
$ echo "$var"
foo
bar
您可以將反引號(或$( ... )
)視為返回在執行它們之間包含的程式碼期間列印在標準輸出上的任何內容。
在您的情況下,它會查看一次的輸出ls -A $1
,並在其輸出中尋找包含 、 或 的行a
,b
然後c
列印 的單列輸出ls -1 $1
。一般來說這是一個壞主意你不應該解析 ls。