Estou lendo o eic_harvest_hostkeys
script da AWS e não entendo esta linha:
key=$(/usr/bin/awk '{$1=$1};1' < "${file}")
Qual é o benefício awk? Não é key=$(/bin/cat "${file}")
melhor?
Estou lendo o eic_harvest_hostkeys
script da AWS e não entendo esta linha:
key=$(/usr/bin/awk '{$1=$1};1' < "${file}")
Qual é o benefício awk? Não é key=$(/bin/cat "${file}")
melhor?
key=$(/bin/cat "${file}")
definekey
o conteúdo do arquivo¹, sem suas novas linhas à direita. (Estou assumindo um arquivo de texto, sem bytes nulos.)key=$(/usr/bin/awk '{$1=$1};1' < "${file}")
normaliza o espaço em branco horizontal: remove espaços e tabulações no início e no final de cada linha e comprime sequências internas de espaços e tabulações em um único espaço. Embora$1=$1
pareça um no-op, na verdade faz com que o awk reconstrua a linha com base no campo atualizado, e a reconstrução da linha apaga a informação de exatamente qual espaço em branco estava ao redor dos campos. Em seguida, ele também remove novas linhas à direita.¹ supondo
$file
que não comece com a , o-
que faria com que fossecat
tratado como um argumento de opção. Usarkey=$(cat < "$file")
seria melhor (key=$(cat -- "$file")
também seria uma melhoria, masfile='-'
ainda seria um problema).A atribuição a
$1
forçaawk
a reescrever a linha de entrada para um formato canônico.Além disso, quando
file=-x
, ou seja, está referenciando um nome de arquivo que começa com um traço, usingkey=$(<"$file")
funcionará corretamente, enquantokey=$(cat "$file")
produzirá um erro comocat: unknown option -- x
em muitas (todas?) implementações decat
.mesmo isso já é muito verboso. apenas faça :
nem precisa de nenhuma citação no nível do shell, pois o primeiro
NF
do lado esquerdo impede que o shell tente fazer qualquer coisa com esse=
sinal de igual