コマンドライン引数を使用するC言語でプログラムを作成したところ、最初の引数を出力しようとしました。次のコマンドでプログラムを実行すると
./a.out $23
以下のコードを使用して最初の引数を出力してみてください
printf("%s", argv[1]);
出力はちょうど
3
いくつかの特殊文字が存在する場合、コマンドライン引数の扱いが異なるということです。誰かがこの振る舞いを説明できますか?
コマンドライン引数を使用するC言語でプログラムを作成したところ、最初の引数を出力しようとしました。次のコマンドでプログラムを実行すると
./a.out $23
以下のコードを使用して最初の引数を出力してみてください
printf("%s", argv[1]);
出力はちょうど
3
いくつかの特殊文字が存在する場合、コマンドライン引数の扱いが異なるということです。誰かがこの振る舞いを説明できますか?
$
キャラクターをエスケープする必要があります。
これを試して:
./a.out \$23
おそらく、$2
はシェル変数として扱われています。ドル記号をエスケープしてみてください。
./a.out \$23
次のように引数を「禁止」する必要があります。
./a.out \$23
一部の文字は、シェルによって解釈されます。これらの文字には次のものがあります。
\
そのすぐ後ろの文字を禁止(エスケープ)します(スペース、タブ、またはあなたの場合に役立ちます)*
単一の文字または文字列を表す$
これは変数を表します(あなたの場合、シェルは文字列「$23」ではなく、変数 $23 を理解します)||
または|
、コマンドの解決を許可するか、コマンドをパイプする&&
&
コマンドの組み合わせを許可するか、ジョブ制御を使用できるか"
これにより、シェルは文字列を区切ることができます'
これにより、シェルは特殊文字を含む文字列を解釈できなくなります;
コマンドを区切るもの`
これらのうちの 2 つで囲まれたコマンドを解釈し、コマンドの出力を返します。シェルは$23
、位置パラメータ$2
の後にリテラル文字3が続くものとして扱います。文字列「$ 23」を渡すには、次のいずれかを実行します。
./a.out \$23
また
./a.out '$23'
シェルの23番目の位置パラメーターを渡すには(可能性は低いですが可能です)、次のように記述します。
./a.out ${23}