Bashスクリプト:引用符と一重引用符を含むbashスクリプトに変数を渡します。ちょっと待って[閉じる]

Bashスクリプト:引用符と一重引用符を含むbashスクリプトに変数を渡します。ちょっと待って[閉じる]

これが文字列であるとしましょう。

   'a',"b"

一重引用符と二重引用符が含まれています。

これをbashスクリプトに単一の文字列として渡すにはどうすればよいですか?

Bashスクリプトは次のとおりです。

#!/bin/bash
echo $1

それは鳴らなければならない

'a',"b"

しかし、文字列が小さすぎると仮定することはできません。結局は全部送ろうとします

 /etc/httpd/conf/httpd.conf

このbashスクリプトの文字列として。

したがって、引用符と一重引用符を同時に外すことはできません。

答え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)に渡すことをお勧めします。より標準的なものに加えて、すべてのコマンドラインパラメータを組み合わせた最大長があり、ファイルはこの長さより長い場合があります。今でも動作しても時間が経つにつれてファイルが大きくなる可能性がある場合は、最終的にファイル全体を引数として渡すと、「arg list too long」エラーで動作が停止します。

を使用してこの制限を見つけることができますgetconf ARG_MAX。サイズは非常に多様です。私のシステムには2MBの制限と256KBの制限があります。ファイルが常に小さい場合は心配する必要はありません。ただし、そうでない場合は、データをスクリプトにインポートする別の方法を試してください。

関連情報