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

1

vamos supor que esta é a string:

   'a',"b"

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 supor que a string seja minúscula. finalmente eu planejo enviar o todo

 /etc/httpd/conf/httpd.conf

como uma string para este script bash.

para que eu não possa realmente escapar de aspas e aspas simples, uma de cada vez.

    
por user72685 21.06.2014 / 09:44

1 resposta

5

Você pode usar a substituição de comando :

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

Isso executará cat /etc/httpd/conf/httpd.conf e colocará a saída (o conteúdo do arquivo) no primeiro argumento dado a oo.sh . É citado, então é passado como um único argumento - espaços e caracteres especiais são passados intocados. oo.sh recebe um único argumento.

Mais amplamente, no entanto, 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 tamanho máximo que todos os argumentos de linha de comando juntos podem ser, e um arquivo pode ser mais longo que isso. Mesmo se funcionar agora, se esse arquivo puder crescer ao longo do tempo, eventualmente, passar a coisa toda como um argumento parará de funcionar com um erro "lista de argumentos muito longa".

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

    
por 21.06.2014 / 10:18