Eu quero escrever um script que ecoe na stdout
íntegra $@
, incluindo quaisquer aspas duplas em potencial, sem uma nova linha.
O que eu tentei:
> cat ./script1
#! /usr/bin/bash
printf "%s %s" $0 $@
echo -n $0 $@
echo -n "$0 $@"
>
> ./script1 a "bc d"
./script1 abc d./script1 a bc d./script1 a bc d>
Eu gostaria que meu script fosse executado da seguinte forma:
> ./script1 a "bc d"
./script1 a "bc d">
Existe uma maneira de fazer isso?
Seus parâmetros posicionais não contêm aspas duplas em seu exemplo:
As aspas duplas existem simplesmente para informar ao shell que nenhuma divisão de palavras deve ser executada no espaço entre
bc
ed
.Se você quiser que seu segundo parâmetro contenha aspas literais, você precisa escapá-las para informar ao shell que são literais:
ou
Você pode usar
printf
para imprimi-los em um formato que pode ser reutilizado como entrada do shell (com escape):Como você pode ver, isso apenas escapa do espaço.
Como foi explicado em outro lugar, as aspas duplas que você digita são indicações para o shell de que o texto incluído deve ser tratado como uma única palavra. Se você quiser imprimir as palavras entre aspas, isso é bastante simples; você só precisa incluí-los no texto que você produz:
Observe que isso adicionará aspas duplas a todos os argumentos, não apenas àqueles que podem tê-los quando você executou o comando.