我正在阅读 AWSeic_harvest_hostkeys
脚本,但我不明白这一行:
key=$(/usr/bin/awk '{$1=$1};1' < "${file}")
awk的好处是什么?不是key=$(/bin/cat "${file}")
更好吗?
我正在阅读 AWSeic_harvest_hostkeys
脚本,但我不明白这一行:
key=$(/usr/bin/awk '{$1=$1};1' < "${file}")
awk的好处是什么?不是key=$(/bin/cat "${file}")
更好吗?
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='-'
仍然是一个问题)。$1
强制awk
将输入行重写为规范格式的分配。此外,当
file=-x
. 即它引用以破折号开头的文件名时, usingkey=$(<"$file")
将正常工作,而会产生错误,key=$(cat "$file")
例如cat: unknown option -- x
.cat
即使那已经太冗长了。做就是了 :
甚至不需要 shell 级别的任何引号,因为
NF
左侧的第一个可以防止 shell 尝试使用该等=
号做任何事情