Решение, которое предоставил @Kusalananda, превосходит это. Я предоставил его, не задумываясь о том, что $ (cat ...)
делает с точки зрения использования памяти. Я оставлю его здесь для справки - он будет работать и не страшен, если файлы маленькие.
#!/bin/bash
for name in $(cat names); do
for year in $(cat years); do
echo "${name}${year}"
done
done
Вы можете изменить бит цитирования, чтобы не разрешать использование обратных кавычек до тех пор, пока не будет использован псевдоним.
alias ncstop 'nc stop `nc list | awk '\''/Running/{print $1}'\''`'
Это работает, потому что при использовании символа '
для цитирования используются специальные символы, такие как |
, $
и обратная кавычка
не интерпретируются оболочкой. Это позволяет этим специальным символам попасть в определение псевдонима. Но в процессе определения псевдонима оболочка удаляет этот внешний слой '
. Что на самом деле заканчивается в определении псевдонима, должно быть:
nc stop `nc list | awk '/Running/{print $1}'`
Конструкция '\' '
часто требует небольшого пояснения. Но вкратце это три апострофа. Первая завершает предыдущую строку в кавычках, следующая (которая экранирована, чтобы оболочка не интерпретировала ее) проходит, а третья начинает другую строку в кавычках. Таким образом, конструкция '\' '
позволяет использовать апостроф (например: '
или одинарные кавычки
) внутри строки, заключенной в одинарные кавычки.
Получение всех кавычек и экранирований прямо в строке, которая должна пройти через несколько уровней интерпретации, очень быстро становится беспорядочным и сложным. Был комментарий к вопросу, который рекомендовал (для bash
) вместо этого изучить реализацию псевдонимов как функций.Я почти уверен, что то же самое можно посоветовать для tcsh
.
просто используйте $(command)
вместо обратных кавычек, например. заменить файл набором аргументов командной строки:
alias run="gdb --args./program $(cat args.txt)"