O número de argumentos convertidos do stdin tem que ser o mesmo que o número de espaços reservados no comando?

0

Quando xargs cria vários argumentos de um fluxo de entrada stdin ( -d pode especificar o separador para dividir um fluxo de entrada stdin em vários argumentos), como o xargs reorganiza-os no comando que deve executar?

xargs tem uma opção -I para especificar os espaços reservados nos comandos para onde substituir os argumentos. Quando xargs cria vários argumentos de um fluxo de entrada stdin, o espaço reservado deve ocorrer o mesmo número de vezes que o número de argumentos?

Por exemplo, o número de argumentos convertidos do stdin tem que ser o mesmo que o número de espaços reservados no comando?

$ xargs -I x -d " " ls x x x
-l -t -r
    
por Ben 22.11.2018 / 20:13

1 resposta

1

Você pode tentar isso sozinho

$ echo -n a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g g g

Do manual:

-I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.

-L max-lines
Use at most max-lines nonblank input lines per command line. Trailing blanks cause an input line to be logically continued on the next input line. Implies -x.

Portanto, -I implica -L 1 , o que significa que apenas um argumento é usado para cada chamada. Como você pode ver, cada ocorrência de x é substituída pelo argumento.

Há também um efeito que pode ser surpreendente no começo:

$ echo a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g
 g
 g

Sem a opção -n , o eco produzirá uma nova linha no final. Com a opção -d , xargs não considerará a nova linha como um separador, em vez disso, faz parte do argumento, portanto, as quebras de linha na saída de g\n : g\n g\n g\n .

    
por 22.11.2018 / 22:22

Tags