Perlスクリプトにコマンド置換のリストを投げ込む
たいした話ではないのですが、Perlのスクリプトの引数に、コマンド置換の結果を投げ込めるということに今気づきました。
こんな感じのスクリプトがあったとしたら、
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode::Locale; use open IO => qw/:encoding(console_out) :std/; use XmlToCsv; my ($csv_path, @file_list) = @ARGV or die; foreach my $xml_file (@file_list) { XmlToCsv->main($xml_file, $csv_path); }
下記のコマンド置換の結果――.xmlファイルのパスのリスト――が「@file_list」に代入されます。
$ batch_xml.pl applist_android_v3.csv `find . -name "*.xml" | egrep "2[7-9]|3[0-4]|95" | egrep -v test`
考えてみたら当たり前のことですね。気づくまではファイル名をPerlスクリプト内でむりやり書いたりとまぬけなことをしていました。
全然違う話なのですが、数字のリストでforコマンドを回したいときは、ブレースで囲ってやればいいみたいです。これも知りませんでした。
for i in {27..34} {40..50} do mv `ls | grep "$i" | grep icon` P"$i" done
物覚えが悪いもので、Perlもシェルコマンドもなかなか思い通りに動いてくれませんが、少しずついろんなことを学んでいきたいですね。