./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に同じ