我對下面的shell語句感到困惑。任何人都可以解釋這個shell語句的含義嗎?
export changeset=`hg parents | awk -F: '/^changeset:/ { print $2 }' | sed -e 's/ //g' -e 1q`
它是如何工作的?
感謝
我對下面的shell語句感到困惑。任何人都可以解釋這個shell語句的含義嗎?
export changeset=`hg parents | awk -F: '/^changeset:/ { print $2 }' | sed -e 's/ //g' -e 1q`
它是如何工作的?
感謝
此命令執行以下操作: -
hg parents
運行善變命令父母awk -F: '/^changeset:/ { print $2 }'
開始在awk讀取它的輸入和與變更開頭的行它打印第二場在線上(字段用:分隔)sed -e 's/ //g' -e 1q
`讀取其所有輸入,刪除空格並打印第一行export changeset=
將引號之間的所有內容都作爲一系列命令運行,並將結果賦給變量變更集。管道符號將命令連接在一起,導致一個程序的標準輸出(STDOUT)成爲另一個程序的標準輸入(STDIN)。
因此,總之,變量changeset將包含hg parents
命令的第一行中的第二個字段,該命令以changeset開頭。
Steve Weet's answer解釋發生了什麼。你的管道可以簡化。在你的awk聲明中,因爲你的分隔符是:
,所以你可以說awk -F: '$1 == "changeset" {print $2}'
。另外,由於awk和sed具有許多重疊的功能,因此您可以編寫(如果您願意,可以在一行中完成):
export changeset=$(
hg parents |
awk -F: '$1 == "changeset" {gsub(/ /, "", $2); print $2; exit}'
)
哪個部分是您感到困惑?你有沒有試過把它分解成它的組成部分? – Johnsyweb 2011-05-27 11:03:40