これが次の文字列であると仮定します:
'a',"b"
一重引用符と二重引用符の両方が含まれています。
これを単一の文字列として bash スクリプトに渡すにはどうすればよいでしょうか?
これは bash スクリプトです:
#!/bin/bash
echo $1
それは反響するはずだ
'a',"b"
しかし、文字列がこれほど小さいとは想定できません。最終的には、文字列全体を送信する予定です。
/etc/httpd/conf/httpd.conf
この bash スクリプトに文字列として追加します。
そのため、引用符と一重引用符を一度に 1 つずつエスケープすることはできません。
答え1
使用できますコマンド置換:
oo.sh "$(cat /etc/httpd/conf/httpd.conf)"
これが実行されcat /etc/httpd/conf/httpd.conf
、出力 (ファイルの内容) が に与えられた最初の引数に格納されますoo.sh
。引用符で囲まれているため、単一の引数として渡されます。スペースと特殊文字はそのまま渡されます。 はoo.sh
単一の引数を取得します。
しかし、もっと広い意味では、可能であればファイル名をスクリプトに渡すか、ファイルの内容を標準入力 ( oo.sh < /etc/httpd/conf/httpd.conf
) として渡す方がよいかもしれません。より標準的であるだけでなく、すべてのコマンドライン引数を合わせた長さには最大長があり、ファイルはそれよりも長くなる可能性があります。今はうまく動作していても、時間が経つにつれてファイルが大きくなる可能性がある場合、最終的には全体を引数として渡すと、「引数リストが長すぎます」というエラーが発生して動作しなくなります。
その制限は で確認できますgetconf ARG_MAX
。サイズは大きく異なります。ここでは 2MB の制限と 256KB の制限を持つシステムがあります。ファイルが常に小さい場合は心配する必要はありませんが、そうでない場合は、データをスクリプトに取り込む別の方法を試す必要があります。