Imprimindo asterisco (*) no shell bash

a=5 echo "*/$aMin * * * * bash /etc/init.d/ckDskCheck.sh" 

Quando tento executar o código a seguir, ele é exibido corretamente
* / 5 * * * * bash /etc/init.d/ckDskCheck.sh

Mas quando eu tento atribuir o resultado usando o código a seguir para a variável e imprimi-lo, ele é exibido como este

 a=5 cronSen=`echo "*/$a * * * * bash /etc/init.d/ckDskCheck.sh"` echo $cronSen 

Resultado: insira a descrição da imagem aqui

Então eu tento escaping do asterisco por

 cronSen=`echo "\*/$a \* \* \* \* bash /etc/init.d/ckDskCheck.sh"` 

Mas ainda não funciona

Qualquer ajuda será muito apreciada, obrigado por toda a ajuda

Você tem dois problemas:

  1. Uso inútil de eco em backticks

  2. Sempre cite o que você faz echo

Então o código fixo é

 a=5 cronSen="*/$a * * * * bash /etc/init.d/ckDskCheck.sh" echo "$cronSen" 

Parece que você também pode ter um Useless Use of Variable, mas talvez o cronSen seja útil em um contexto maior.

Em resumo, cite tudo em que você não precisa do shell para executar a divisão de tokens e a expansão de curingas.

Divisão de token;

  words="foo bar baz" for word in $words; do : 

(Isso faz um loop três vezes. Citando $words seria apenas loop uma vez sobre o token literal foo bar baz .)

Expansão de curinga:

 pattern='file*.txt' ls $pattern 

(Citando $pattern tentaria listar um único arquivo cujo nome é literalmente file*.txt .)

Em termos mais concretos, qualquer coisa que contenha um nome de arquivo geralmente deve ser citada.

Uma variável contendo uma lista de tokens para fazer um loop ou um caractere curinga para expandir é vista com menos frequência, então, às vezes, abreviamos para “citar tudo, a menos que você saiba exatamente o que está fazendo”.

Você deve usar aspas duplas ao ecoar sua variável:

 echo "$cronSen" 

Se você não usar aspas duplas, o bash verá * e executará a expansão do nome do arquivo . * expande para todos os arquivos em seu diretório atual.