Когда ядро разрешает, например. /usr/share/man/man1/cat.1.gz
в индексный узел, он должен будет начинаться с корня /
и опускаться до cat.1.gz
. В случае относительного имени пути нужно только найти файл в текущем каталоге.
Возможно, вы думали о том, как получить абсолютный путь к текущему рабочему каталогу? Чтобы определить путь, вам придется пройти путь от текущего каталога через все промежуточные каталоги до корня. (Но учтите, что ядро не делает этого, если задан относительный путь к файлу, например. в качестве параметра системного вызова open
.)
Проблема здесь в том, что вы пытаетесь получить раскрытие переменной оболочки в одинарных кавычках '... '
. Однако внутри одинарных кавычек раскрытие переменной оболочки приостановлено (, см., например,. этот ответ здесь или Lhunath & GreyCat's Bash Guide ), поэтому это на самом деле рекомендуется :, поскольку $
выполняет аналогичную функцию в awk
при разыменовании отдельных поля ввода (, но где номер поля также может быть выражен именем переменной, как, например, $NF
), заключение программы в одинарные кавычки позволяет избежать одновременного «расширения переменных».
В вашем случае вы можете "импортировать" значение в программу awk
с помощью
awk -v fieldnr="$i" '{if ($NF==fieldnr) {print $NF}}'
Тем не менее, кажется, что ваша проблема может быть полностью решена в awk
, поэтому, возможно, вы захотите объяснить, чего вы хотите добиться более подробно, и мы можем попытаться найти более элегантный (и, возможно, более быстрый )путь; хотя может быть разумно открыть еще один вопрос...
#!/bin/bash
# Tested with -- GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
set -e
for i in `seq 1 1000`
do
echo $i
# Run your command here
done