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.conf
e 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.sh
obté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.