как сгруппировать все аргументы в качестве аргумента позиции для `xargs` - PullRequest
0 голосов
/ 18 марта 2020

У меня есть скрипт, который принимает только один позиционный параметр, который является списком значений, и я пытаюсь получить параметр из стандартного ввода с помощью xargs.

Однако по умолчанию, xargs передает все списки моему сценарию в качестве позиционных параметров, например, при выполнении:

echo 1 2 3 | xargs myScript, это будет по существу myScript 1 2 3, и я ищу myScript "1 2 3". Каков наилучший способ добиться этого?

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Если вход может быть изменен, вы можете сделать это. Но не уверен, что это то, что вы хотели.

echo \"1 2 3\"|xargs ./myScript

Вот пример.

$ cat myScript 
#!/bin/bash

echo $1; shift
echo $1; shift
echo $1;

$ echo \"1 2 3\"|xargs ./myScript
1 2 3


$ echo 1 2 3|xargs ./myScript
1
2
3
1 голос
/ 18 марта 2020

Изменить разделитель.

$ echo 1 2 3 | xargs -d '\n' printf '%s\n'
1 2 3

Хотя не все реализации xargs имеют -d.

И не уверены, что для этого есть реальный вариант использования, но вы также можете прибегнуть к порождая другой экземпляр оболочки, если вам нужно. Как

$ echo -e '1 2\n3' | xargs sh -c 'printf '\''%s\n'\'' "$*"' sh
1 2 3
...