Use aspas:
shasum -a "$sha" "$shapath"
As variáveis serão expandidas como argumentos únicos, independentemente de quaisquer espaços nos valores.
Estou escrevendo um script simples que solicita ao usuário informações e as salva como uma variável a ser passada como argumentos em outro comando. Uma das variáveis armazena um caminho que pode incluir um espaço. Usando a tag read
do comando -r
, o caminho é recuperado como uma entrada 'bruta', ignorando o caractere de escape da barra invertida.
Por exemplo:
read -p "Enter checksum algorithm number (1, 224, 256, 384, 512, 512224, 412256): " -a shaa
read -p "Enter a file path: " -re shapath
O problema é que não consigo descobrir como executar o comando com esses argumentos sem ler o caractere de escape. Resolvido por @heemayl
Eu então preciso armazenar a saída ou o valor de retorno do comando como outra variável.
Por exemplo:
foo=$(shasum -a "$shaa" "$shapath")
No entanto, quando eu echo $foo
, não obtenho a saída esperada de shasum -a "$shaa" "$shapath"
, mas obtenho shasum: /.../checksum.dmg
Consegui fazê-lo funcionar usando eval
e canalizando-o para var
, conforme mostrado abaixo:
eval shasum -a $sha $shapath > val
Li que devo evitar eval
a todo custo e não posso continuar avançando com o script.
Use aspas:
shasum -a "$sha" "$shapath"
As variáveis serão expandidas como argumentos únicos, independentemente de quaisquer espaços nos valores.
Tags shell-script eval variable