プログラムパラメータの区切り記号?

プログラムパラメータの区切り記号?

Cプログラム引数を区切る構文は何ですか?たとえば、次のように入力すると:

./myprogram 1 2 3 | grep result

引数として解釈されます| grep result(およびとして渡されますargv)。それでは、その後の議論をどのように終わらせるべきですか3

答え1

これは本当ではないと思います。シェルは、コマンドライン引数を解釈し、それを解析するときに適切なコマンドに渡す役割を果たします。

したがって、Cプログラムが最終的に実行されると、パラメータ1、2、3のみが表示されます。パイプとそれに続くすべてはシェルの責任であり、Cプログラムに引数として渡されません。

以下は、bashシェルとbashシェルスクリプトを使用した例です。

はい(シェルスクリプト)

スクリプト例test.bash:

#!/bin/bash

file=somefile
[ -f $file ] && rm $file
for var in "$@"
do
  echo "$var" >> $file
done

cat $file

スクリプトを実行すると、結果がファイルに保存されますsomefile

$ ./test.bash 1 2 3 '4 5'
1
2
3
4 5

追加のコマンドライン引数を使用して実行します。

$ ./test.bash 1 2 3 '4 5' | echo hi
hi

$ cat somefile 
1
2
3
4 5

どちらの場合も、スクリプトはtest.bashパイプ(|)につながる引数のみを表示します。 Bashシェルはコマンドの解析を担当するため、後でパイプ(|)を含めて何も表示されません。

例(Cプログラム)

シェルスクリプトの使用について質問がある場合は、コマンドライン引数を受け入れる ac プログラムがあり、同じ動作を見ることができます。

cプログラムの名前は次のとおりですtestc.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  printf("Program name: %s\n", argv[0]);

  while ((argc > 1))
  {
    printf("%s\n",&argv[1][0]);

    ++argv;
    --argc;
  }
  return (0);
}

次のようにコンパイルしてください。

gcc testc.c -o testc

次のように使用してください。

./testc
1
2
3
4 5

$ ./testc 1 2 3 '4 5' | echo hi
hi

上記では、最初の4つのパラメータだけが私のCプログラムですtestc

関連情報