\\
превращается в \
в двойных кавычках. \\ ref
становится \ ref
, что на самом деле является \ r
, за которым следует ef
. Используйте четыре обратной косой черты:
for f in *; do
if [[ -d $f ]]; then
perl -ne "print if s/(\\\\ref\{.*?)\}/\1_$f\}/g" $f/SystemRequirements_$f.tex
fi
done
Аналогично, \ a
- это символ BELL ( \ x07
).
В целом, foo < bar
и < bar foo
эквивалентны в сценариях bash. Каждый раз, когда < filename
обрабатывается оболочкой, это означает, что команда, с которой он связан, будет получать стандартный ввод из этого файла. Никаких дополнительных команд или процессов здесь не задействовано; оболочка делает это сама.
Запуск cat filename
считывает содержимое указанного файла и записывает его в стандартный вывод. |
между двумя командами означает подключение стандартного вывода левой команды к стандартному вводу правой команды.
Таким образом, обе ваши команды имеют одинаковый эффект отправки содержимого /proc/uptime
в awk, но первый способ запускает для этого дополнительный cat
процесс.