Eu olhei para Quoting dentro de $ (substituição de comando) no Bash e ainda não entendi o que faço incorretamente (meu código me parece "é a maneira recomendada" da resposta aceita) e como corrigi-lo:
print_and_run(){
echo next line: "$1"
echo "$($1)"
}
print_and_run 'sed --in-place -- "s|fetch = +refs/\*:refs/\*|fetch = +refs/heads/*:refs/remotes/origin/*|" .git/config'
next line: sed --in-place -- "s|fetch = +refs/\*:refs/\*|fetch = +refs/heads/*:refs/remotes/origin/*|" .git/config
sed: -e expression #1, char 1: unknown command: `"'
sed
linha funciona sozinha, função print_and_run
funciona para comandos sem aspas, por exemplo print_and_run 'cat ./.git/config'
. TIA
PS btw não tenho certeza se isso importa: escrevi para echo "$($1)"
não echo $($1)
imprimir com novas linhas: https://stackoverflow.com/questions/15184358/how-to-avoid-bash-command-substitution-to-remove-the-newline-character e agora vejo que o primeiro parece "é a maneira recomendada").
Talvez você possa tentar de uma maneira diferente:
Resultado:
Neste exemplo, a citação original é preservada. No entanto, coisas como pipes ou redirecionamentos ainda não funcionarão.
Uma abordagem completamente diferente seria confiar na impressão de comando integrada do shell:
Ele imprimirá uma linha como esta:
Portanto, você não precisa implementar seu próprio comando de impressão, o shell já faz isso por você.