- 364 名前:デフォルトの名無しさん mailto:sage [2006/10/29(日) 23:14:19 ]
- >>363
bash の man を参照するとわかるがクォートの除去は 各種展開が終わってから行われる。 冗長に処理の流れを書くとこうなる。 1. コマンド実行 -> (STAT=`rsh hostname "sh -c 'ls; echo \\$?'"`) 2. ローカルのシェルがコマンド置換(バッククォートの処理)を行う -> (rsh hostname "sh -c 'ls; echo \\$?'") 3. サブシェルが起動してバッククォートの中身を展開する -> (rsh) (hostname) (sh -c 'ls; echo \$?') 4. サブシェルが rsh に引数 (hostname) (sh -c 'ls; echo \$?') を渡す 5. rsh が hostname のシェルに (sh -c 'ls; echo \$?') を渡す 6. hostname のシェルが引数を展開する -> (sh) (-c) (ls; echo \$?) 7. hostname のシェルが sh に (-c) (ls; echo \$?) を渡す 8. sh が引数を展開、実行する -> (ls; echo $?) 9. sh -> hostname のシェル -> rsh -> サブシェルの順に返り値が渡り、コマンド置換が終了 10. STAT に返り値が代入される
|

|