複雑な状況での引用規則

複雑な状況での引用規則

コード行を作成するときに、特定の文字をエスケープする必要がある場合があります。

自分で答えられない状況にぶつかりました。

PHPでは、execコマンドには引用符( ')で囲まれた文字列が必要です。引用符( ')で囲まれた文字列を必要とする/bin/bash -cコマンドを呼び出そうとします。

この問題の解決策は次のとおりです。

$line = exec('/bin/bash -c \'read -e -p "Check to confirm string: " -i "'.$preFill.'" input; echo $input\'');

ユーザーに提案するテキストに文字( ')を挿入しない限り、問題はありません。インタラクティブモードでphp -aを使用するいくつかの例を見ることができます:

php > $preFill = 'I m reach';
php > $line = exec('/bin/bash -c \'read -e -p "Check to confirm string: " -i "'.$preFill.'" input; echo $input\'');
Check to confirm string: I m reach
php >

問題は、$preFillに「到着しました」を正しい方法で入れるためにどのエスケープルールを考慮する必要がありますか?

ベストアンサー1

渡されたコードbashと渡されたコードshphp'sで始まる)へのexec()参照が必要です。

$preFill = 'I m reach';
$prompt = 'Check to confirm string: ';
$bash_code = 'IFS= read -re -p ' .
              escapeshellarg($prompt) .
              ' -i ' .
              escapeshellarg($preFill) .
              ' input; printf "%s\n" "$input"';
$sh_code = 'exec /bin/bash -c ' . escapeshellarg($bash_code);
$output = exec($sh_code);
echo $output;

君も忘れてたのそしてIFS=-rためのreadシェルパラメータ拡張に関する引用、そして覚えておいてくださいecho任意のデータと一緒に使用することはできません

両方を実行しshbashユーザーにメッセージを表示するのは過度のようです。

おすすめ記事