Bash
這個命令行有什麼好處(/usr/bin/awk’{1=1=1=1};1’) 而不是純貓
我正在閱讀 AWS
eic_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='-'
仍然是一個問題)。