Argumentos transmitidos pelo shell para comandar no Unix

1

Eu tenho passado por essa questão e não posso, para a vida de mim, descobrir por que a resposta é o que é. Quantos argumentos são passados para o comando pelo shell neste comando line:
<pig pig -x " " -z -r" " >pig pig pig
uma. 8 b. 6 c. 5 d. 7 e. 9
O primeiro símbolo deve ser o símbolo da entrada redirecionada, mas o site não está me permitindo usá-lo. [Fixo.]
Eu olhei para esta pergunta e disse ok ... argumentos ... não opções para o 2º porco, então "", então -r "", 4º porco e 5º porco ...- z e -x são opções, então eu conto 5. A resposta é b. 6. Onde está o sexto argumento que está sendo passado?

    
por Ryan Brown 26.10.2012 / 05:42

2 respostas

0

Acho que você está enfrentando problemas semânticos com exatamente o que conta como argumento.

As opções são, no nível da linha de comando, argumentos que o comando trata especialmente. (Mais especificamente: eles são incluídos no array argv passado para o comando.) Então, dependendo exatamente do significado de "argumento", eles podem ou não ser incluídos na contagem. Eu suspeito que eles estão sendo incluídos, mas que o segundo "porco" não é (porque é o nome do comando, que não é um argumento) (bem, ok, ele está incluído no argv também, mas não conta) (principalmente).

Para ilustrar o que quero dizer sobre as opções serem argumentos especialmente tratados (e a arbitrariedade da distinção), considere o seguinte comando:

tar cv -f foo.tar bar
  • tar é o comando
  • cv é duas opções (criar e verboso). Eu sei que não parece, mas tar antecede o uso consistente de - para introduzir opções, e tratará seu primeiro "argumento" como uma ou mais opções, mesmo que não comece com -
  • -f foo.tar é outra opção e o argumento its (que é diferente de um argumento de comando geral)
  • bar é um argumento de comando normal (finalmente!)

Observe que esses comandos são equivalentes ao acima:

tar cvf foo.tar bar
tar cv -ffoo.tar bar
    
por 26.10.2012 / 08:09
1

Os argumentos passados para o programa pig são:

  1. -x
  2. ""
  3. -z
  4. -r ""
  5. segundo ao último porco
  6. último porco

De uma perspectiva de programação, é costume considerar tudo em argv (exceto argv[0] ) um argumento para o programa. Isso inclui tokens de "opção" - quer dizer, e se o programa não tiver opções e, em vez disso, considerar algo como "-x" como um nome de arquivo?

    
por 26.10.2012 / 08:15