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
。