Bash Script: Passando uma variável para um script bash que contém aspas, aspas simples. etc

Bash Script: Passando uma variável para um script bash que contém aspas, aspas simples. etc

vamos supor que esta seja a string:

   'a',"b"

ele contém aspas simples e duplas.

como você passaria isso para um script bash como uma única string?

este é o script bash:

#!/bin/bash
echo $1

deve ecoar

'a',"b"

mas não podemos presumir que a corda seja tão pequena. em última análise, pretendo enviar o todo

 /etc/httpd/conf/httpd.conf

como uma string para este script bash.

então eu realmente não posso escapar de aspas e aspas simples, uma de cada vez.

Responder1

Você pode usarsubstituição de comando:

oo.sh "$(cat /etc/httpd/conf/httpd.conf)"

Isso será executado cat /etc/httpd/conf/httpd.confe colocará a saída (o conteúdo do arquivo) no primeiro argumento fornecido a oo.sh. Ele está entre aspas, então é passado como um único argumento — espaços e caracteres especiais são passados ​​sem serem alterados. oo.shobtém um único argumento.


De forma mais ampla, porém, talvez seja melhor passar o nome do arquivo para o script, se possível, ou fornecer o conteúdo do arquivo como entrada padrão ( oo.sh < /etc/httpd/conf/httpd.conf). Além de ser mais padrão, há um comprimento máximo que todos os argumentos da linha de comando juntos podem ter, e um arquivo pode ser maior que isso. Mesmo que funcione agora, se esse arquivo crescer com o tempo, eventualmente passar tudo como um argumento irá parar de funcionar com um erro "lista de argumentos muito longa".

Você pode encontrar esse limite com getconf ARG_MAX. O tamanho varia drasticamente: tenho sistemas aqui com limites de 2 MB e limites de 256 KB. Se o seu arquivo sempre for pequeno, você não precisa se preocupar, mas caso contrário, você deve tentar outra maneira de inserir os dados no script.

informação relacionada