より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

起動引数の間のスペース多い場合はどうなる?

プログラムを呼び出す時に起動引数を渡して実行します。

起動引数はスペース区切りで複数の引数を渡すことも可能です。

起動引数の間のスペースが1つではなく、スペースが2つ以上だったらどうなる?

ふと、疑問が浮かびました。

以下のような起動引数だったらどうなるのか、と。

one two            three four

twoとthreeの間の長いスペースは一つの区切りとなるのか、そうではないのか、と。

実際にコードを動かして確認したこと

using System;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Start");
            for (int i = 0; i < args.Length; i++)
            {
                Console.WriteLine($"{i+1}:{args[i]}");
            }
            Console.WriteLine("End");
        }
    }
}

f:id:rimever:20200701202739p:plain

f:id:rimever:20200701202817p:plain
スペース一つだろうか、スペース二つ以上でも分割されて処理された。

C#では長いスペースも一つの区切りと見なされ、one,two,three,fourという4つの起動引数となりました。

上記のコードもRiderでデバッグで動かすと、以下のようにスペース複数を一つの区切りとみなしてくれませんでした。

f:id:rimever:20200701204658p:plain
あれ?

Visual Studioでも動作確認したところ、Macから起動引数をコピーして、Windowsで実行すると

f:id:rimever:20200701204828p:plain

スペース複数を一つの区切りとみなしてくれてませんね。

f:id:rimever:20200701204926p:plain
しかし、手で入れ直すと問題なくスペース複数を一つの区切りとみなしてくれる

結局、きちんとexeに起動引数を渡して試すことにしました。

スペース複数を一つの区切りとみなして処理されました。

f:id:rimever:20200701205051p:plain

原則、スペース複数でも一つの区切りとなると思って良さそうですが、変なことはしないと良さそうですね。