(хотя разбиение слов имеет определенное определение в Bash, в этом посте это означает для разделения на пробелы или табуляции .)
Демонстрация вопроса с использованием этого ввода для xargs,
$ cat input.txt
LineOneWithOneArg
LineTwo WithTwoArgs
LineThree WithThree Args
LineFour With Double Spaces
и этой команды Bash для вывода переданных ему аргументов,
$ bash -c 'IFS=,; echo "$*"' arg0 arg1 arg2 arg3
arg1,arg2,arg3
обратите внимание, как xargs -L1
разбивает слова в каждой строкев несколько аргументов.
$ xargs <input.txt -L1 bash -c 'IFS=,; echo "$*"' arg0
LineOneWithOneArg
LineTwo,WithTwoArgs
LineThree,WithThree,Args
LineFour,With,Double,Spaces
Однако xargs -I{}
расширяет всю строку до {}
в качестве одного аргумента.
$ xargs <input.txt -I{} bash -c 'IFS=,; echo "$*"' arg0 {}
LineOneWithOneArg
LineTwo WithTwoArgs
LineThree WithThree Args
LineFour With Double Spaces
Хотя это вполне разумное поведение для подавляющего большинстваВ некоторых случаях предпочтение отдается разделению слов (первый пример xargs
).
И хотя xargs -L1
можно рассматривать как обходной путь, его можно использовать только для размещения аргументов в конец командной строки, что делает невозможным выражение
$ xargs -I{} command first-arg {} last-arg
с xargs -L1
.(Это, конечно, если command
не может принимать аргументы в другом порядке, как в случае с опциями.)
Есть ли способ получить xargs -I{}
для разделения словкаждая строка при расширении {}
заполнителя?