Відповіді:
Просто напишіть {}
два рази в свою команду. Працює таке:
$ echo test | xargs -I {} echo {} {}
test test
Ваша проблема полягає в тому, як команди вкладені . Давайте подивимось на це:
echo test | xargs -I {} echo {} && echo {}
Баш виконає echo test | xargs -I {} echo {}
. Якщо вона працює успішно, echo {}
виконується. Щоб змінити гніздування, ви можете зробити щось подібне:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Однак у вас можуть виникнути проблеми, оскільки підхід може бути схильний до введення коду. Коли "тест" замінюється кодом оболонки, він виконується. Тому, ймовірно, вам слід передати вхід до вкладеної оболонки з аргументами.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
. Краще це зробитиxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Іншим варіантом є використання -i
прапора, який є таким же, як -I{}
(це означає, що заміна задається на {}
):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
додано до посібника man xargs
.
Для мене працює лише нижній регістр. Я мав сотні зображень у довіднику і хотів занести їх джерела в список. Версія верхнього регістру я -I
не працювала для мене. Лише нижній регістр. Можливо, через різниці версій. Усі ці зображення мали назви, якDaniel_(somenumber).jpg
.
Цей синтаксис спрацював:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
Повернення:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...