揮発性のメモ2

http://d.hatena.ne.jp/iww/

コマンドライン引数の取得

./a.out abc あいうえお '' 山田

みたいなのをコマンドラインで渡したときの引数の取り方と、取れ方

java

public class hoge {
    public static void main(String[] args) {
        System.out.println( "args.length=" + args.length );
        
        for (int i=0; i<args.length; ++i) {
            System.out.println( "args[" + i + "]=" + args[i]);
        }
    }
}
$ gcj --main=hoge hoge.java
$ ./a.out abc あいうえお '' 山田
args.length=4
args[0]=abc
args[1]=あいうえお
args[2]=
args[3]=山田

実行ファイル名は取得できない

bash

#!/bin/sh

echo '$#='$#

echo '$0='$0
i=1
for v in "$@"; do
    echo "\$$i=$v"
    i=$((i+1))
done
$#=4
$0=./hoge.sh
$1=aaa
$2=あいうえお
$3=
$4=山田

$0はshiftで取得できない特別な存在。 あと、forでバラすときに$@をちゃんと""で括らないと空文字列が取り出せないので注意する。

perl

#!/usr/bin/perl

print '@ARGV=', @ARGV+0, "\n";

print '$0=', $0, "\n";
my $i=0;
foreach $v ( @ARGV ){
    print '$ARGV[', $i, ']=', $v, "\n";
    $i++;
}
@ARGV=4
$0=./hoge.pl
$ARGV[0]=aaa
$ARGV[1]=あいうえお
$ARGV[2]=
$ARGV[3]=山田

$#ARGVいらない子。 実行ファイル名は$0で取る

C

#include <stdio.h>
int main( int argc, char **argv )
{
    printf("argc=%d\n",argc);
    
    int i;
    for(i=0;i<argc;i++){
        printf("argv[%d]=%s\n",i,argv[i]);
    }
    return 0;
}
argc=5
argv[0]=./a.out
argv[1]=abc
argv[2]=あいうえお
argv[3]=
argv[4]=山田

実行ファイル名もコマンドライン引数として取得する

PHP

#!/usr/bin/php -q
<?
    print '$argc='. $argc. "\n";
    
    $i=0;
    foreach( $argv as $v ){
        printf( "\$argv[%d]=%s\n", $i, $v );
        $i++;
    }
?>
$argc=5
$argv[0]=./hoge.php
$argv[1]=abc
$argv[2]=あいうえお
$argv[3]=
$argv[4]=山田

Cに同じ