Відповіді:
Просто напишіть {}два рази в свою команду. Працює таке:
$ 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 ...