Хотя /
(U + 002F) является разделителем компонентов пути и, очевидно, не может использоваться в именах файлов, существует несколько ( ╱
⟋
⁄
∕
⧸
⁄
например, даже один комбинированный ( ̸
)), которые выглядят очень похожими и что вы могли бы использовать вместо этого, если намерение состоит в том, чтобы сбить с толку или обмануть людей, использующих систему.
Например:
mkdir A3456⁄90876⁄IN
Теперь, если вы просто хотите создать каталог IN
внутри каталога 90876
внутри каталога A3456
с помощью одной единственной команды , то это просто:
mkdir -p A3456/90876/IN
Рассмотрим следующий пример скрипта (все отступы являются буквальными вкладками):
#!/bin/sh
var='hello'
cat >script1.sh <<-END_SCRIPT1
#!/bin/sh
echo 'This is script1 ($var)'
printf '\$0 is "%s"\n' "\$0"
cat >script2.sh <<END_SCRIPT2
#!/bin/sh
echo 'This is script2 ($var)'
printf '\\\$0 is "%s"\n' "\\\$0"
END_SCRIPT2
END_SCRIPT1
Во внешнем здесь -документе нам нужно экранировать $
в "$0"
как "\$0"
, чтобы он не расширялся сценарием, записывающим документ.
Чтобы иметь возможность записать внутренний здесь -документ, мы должны убедиться, что внешний здесь -документ пишет "\$0"
. Обратная косая черта должна быть экранирована как \\
, что превращает строку в "\\\$0"
.
Сценарий выше записывает script1.sh
как
#!/bin/sh
echo 'This is script2 (hello)'
printf '\$0 is "%s"\n' "\$0"
END_SCRIPT2
printf '$0 is "%s"\n' "$0"
Запуск этих выходов
This is script1 (hello)
$0 is "script1.sh"
... и script2.sh
создается:
#!/bin/sh
echo 'This is script2 (hello)'
printf '$0 is "%s"\n' "$0"
Обратите внимание, что внутренний здесь -документ создан с использованием <<END_SCRIPT2
, а не <<-END_SCRIPT2
. Любые начальные вкладки будут съедены, когда будет создан внешний здесь -документ (, как видно изscript1.sh
).
Кроме того, вам не нужны два вызова wait
в вашем коде, так как вы не запускаете никаких фоновых процессов.
Ваш код awk
также неверен, так как условие f && /testphrase2/
никогда не будет истинным. Если /testphrase/
совпадает, то выполняется next
, заставляя код продолжаться со следующей строки ввода. Если /testphrase/
не соответствует, то и /testphrase2/
не будет соответствовать.
Вместо этого вы можете попробовать:
awk '!f && /testphrase/ { f = 1; r = "" }
f && /testphrase2/ { f = 0 }
f { r = (r == "" ? $0 : r RS $0) }
END { print r }'