程序参数的分隔符?

程序参数的分隔符?

分隔 C 程序参数的语法是什么?例如,如果我输入:

./myprogram 1 2 3 | grep result

| grep result被解释为参数(并作为 传递argv)。那么如何终止之后的争论呢3

答案1

我不认为这是真的。 shell 负责解释命令行参数,并在解析命令行参数时将它们传递给相应的命令。

所以你的 C 程序,当它最终被执行时,只会看到参数 1、2 和 3。管道和后面的所有内容都是 shell 的责任,不会作为参数传递给 C 程序。

下面是一个使用 bash shell 和 bash shell 脚本的示例。

示例(shell 脚本)

示例脚本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 shell 负责解析命令,因此它之后不会显示任何内容,包括管道 (|)。

示例(C 程序)

如果对使用 shell 脚本有任何疑问,这里有一个接受命令行参数的 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.

相关内容