さて、これをなぞなぞ...次のシナリオでは、シェルコマンドを介して引用符で囲まれたコマンドライン引数を生成し、次のようにPerlスクリプトに渡します。
script.pl `echo --string \"blah blah yup\"`
問題は、GetOptions ("string=s" => \$string)
文字列の値をに設定することです
"blah
最初の二重引用符文字を含み、最初の空白で区切ります。echoコマンド自体は、桃色に見える引用符で囲まれた文字列を使用してパラメーターを出力します。
--string "blah blah yup"
script.pl --string "blah blah yup"
エコーなしで呼び出すと、文字列を含む空白がPerlスクリプトで期待どおりに設定されます。
バックティックが問題である可能性があると思いましたが、これらのバリアントでも同じ結果が得られます。
script.pl $(echo --string \"blah blah yup\")
script.pl $(echo "--string \"blah blah yup\"")
script.pl $(echo --string \"blah\ blah\ yup\")
script.pl $(echo '--string \"blah blah yup\"')
ただし、最後の例ではstring = \"blah
(最初の円記号と二重引用符を含む)になります。
シェルコマンドのSTDOUTから返された出力は、コマンドラインに入力された文字列と同じようにPerlの引数解析機構によって処理されていないようです。文字列の代替可能性のこの明らかな欠如は、いくぶん驚くべきことですが、おそらくbashのいくつかの側面のために私は理解していません。(ところで、私はこれをDarwinのPerl 5.24とLinuxの5.16でテストしました)