Bash

這個命令行有什麼好處(/usr/bin/awk’{1=1=1=1};1’) 而不是純貓

  • March 29, 2022

我正在閱讀 AWSeic_harvest_hostkeys腳本,但我不明白這一行:

key=$(/usr/bin/awk '{$1=$1};1' < "${file}")

awk的好處是什麼?不是key=$(/bin/cat "${file}")更好嗎?

$1強制awk將輸入行重寫為規範格式的分配。

{ echo 'one  two  three'; echo '  indented with trailing  '; } | cat
one  two  three
 indented with trailing

{ echo 'one  two  three'; echo '  indented with trailing  '; } | awk '{$1=$1}; 1'
one two three
indented with trailing

此外,當file=-x. 即它引用以破折號開頭的文件名時, usingkey=$(<"$file")將正常工作,而會產生錯誤,key=$(cat "$file")例如cat: unknown option -- x.cat

key=$(/bin/cat "${file}")設置key為文件¹的內容,沒有尾隨的換行符。(我假設一個文本文件,沒有空字節。)

key=$(/usr/bin/awk '{$1=$1};1' < "${file}")標準化水平空白:它刪除每行開頭和結尾的空格和製表符,並將空格和製表符的內部序列壓縮為單個空格。雖然$1=$1看起來像是無操作,但它實際上會導致 awk 根據更新的欄位重建行,並且重建行會刪除欄位周圍的確切空白資訊。然後它還會刪除尾隨的換行符。


¹ 假設$file不以 a 開頭,-這會導致cat將其視為選項參數。使用key=$(cat < "$file")會更好(key=$(cat -- "$file")也將是一種改進,但file='-'仍然是一個問題)。

引用自:https://unix.stackexchange.com/questions/690194