コマンドライン引数を使用する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}