Я пытаюсь написать короткий сценарий и следующую команду:
echo "aaa111 bbb111" | xargs -I {} echo {} | sed 's/111/222/g'
возвращает aaa222 bbb222
, чего я и ожидал.
Я ожидал следующей команды:
echo "aaa111 bbb111" | xargs -I {} echo $(echo {} | sed 's/111/222/g')
вернуть то же самое, но возвращает aaa111 bbb111
! Это почему?
UPD: Чего я пытаюсь достичь:
У меня много файлов, таких как pic30-coff-gcc
, pic30-coff-ag
и т. Д., И мне нужно сделать символическую ссылку для каждого файла, например pic30-gcc
-> pic30-coff-gcc
и т. Д.
Итак, я написал это:
ls|grep 'coff-'|xargs -I {} ln -s {} $(echo {} | sed 's/coff-//g')
Это не работает: для каждого файла он сообщает, что файл существует. Я проверил команду так:
ls|grep 'coff-'|xargs -I {} echo "ln -s {} $(echo {} | sed 's/coff-//g')"
И да, часть sed
не работает:
ln -s pic30-coff-gcc pic30-coff-gcc
ln -s pic30-coff-gcc-4.0.3 pic30-coff-gcc-4.0.3
...
Но если я просто напечатаю
echo "ln -s pic30-coff-gcc $(echo pic30-coff-gcc | sed 's/coff-//g')"
оно работает:
ln -s pic30-coff-gcc pic30-gcc
Затем я написал тестовую команду с aaa111
, и она тоже не работает. Все еще не могу понять, почему.