Для начала, ожидая реальной строки значения $p :, обязательно заключайте $p в кавычки.
fname=$(sed 's/(.*//' <<< "$p" | awk '{ print $NF }')
Также обратите внимание, sed 's/(.*//'
соответствует концу строки.
f='(something) and more stuff';sed 's/(.*//' <<< "$f"
Результатом, конечно же, является пустая строка.
f='(something)-and more stuff';sed 's/([^)]*)//' <<< "$f"
Результаты в:-и многое другое
Здесь -doc — это всего лишь один синтаксис для передачи определенных входных данных на стандартный ввод программы. Но это не единственный. Вы также можете использовать:
труба:
printf "a\n" | cat
здесь -строка:
cat <<< "a"
процесс подстановки (как вы уже делали):
cat < <(printf "a\n")
(Обратите внимание, что строка здесь -добавит новую строку в конец данной строки. Другие не будут, поэтому я добавил один вручную с помощью printf
.)
Передача строк EOF
в cat
, вероятно, не очень полезна, это просто часть синтаксиса здесь -doc.