質問のタイトルはコマンドの略なのでsystem
、これは直接回答しますが、bashを使用したサンプルコマンドには、perlのみでより単純になるもののみが含まれています(opendir
および-d
perlを使用した他の回答を見てください)。
system
(の代わりに)を使用する場合、またはのopen $cmdHandle,"bash -c ... |"
ような実行コマンドの推奨される構文は、コマンド ラインを解析できるようにすることです。system
exec
perl
これを試してください(すでに行っているように):
perl -e 'system("bash -c \"echo hello world\"")'
hello world
perl -e 'system "bash -c \"echo hello world\"";'
hello world
そして今、同じですが、perl
コマンドラインの解析を確実にするために、これを試してください:
perl -e 'system "bash","-c","echo hello world";'
hello world
system
コマンドには明らかに 3 つの引数があります。
- バッシュ
- -c
- スクリプト
またはもう少し:
perl -e 'system "bash","-c","echo hello world;date +\"Now it is %T\";";'
hello world
Now it is 11:43:44
最後の目的でわかるように、コマンド ラインのbash スクリプト部分を囲む二重引用符はありません。
**注意: コマンド ラインでperl -e '...'
orを使用perl -e "..."
すると、引用符と二重引用符をいじるのは少し重くなります。スクリプトでは、それらを混在させることができます:
system 'bash','-c','for ((i=10;i--;));do printf "Number: %2d\n" $i;done';
あるいは:
system 'bash','-c','for ((i=10;i--;));do'."\n".
'printf "Number: %2d\n" $i'."\n".
'done';
(スクリプト部分)文字列の一部を連結.
するためにドットを使用すると、常に3つの引数があります。