Использование переменной цикла for в bash для другой команды

Когда ядро ​​разрешает, например. /usr/share/man/man1/cat.1.gzв индексный узел, он должен будет начинаться с корня /и опускаться до cat.1.gz. В случае относительного имени пути нужно только найти файл в текущем каталоге.

Возможно, вы думали о том, как получить абсолютный путь к текущему рабочему каталогу? Чтобы определить путь, вам придется пройти путь от текущего каталога через все промежуточные каталоги до корня. (Но учтите, что ядро ​​не делает этого, если задан относительный путь к файлу, например. в качестве параметра системного вызова open.)

3
18.02.2020, 15:51
2 ответа

Проблема здесь в том, что вы пытаетесь получить раскрытие переменной оболочки в одинарных кавычках '... '. Однако внутри одинарных кавычек раскрытие переменной оболочки приостановлено (, см., например,. этот ответ здесь или Lhunath & GreyCat's Bash Guide ), поэтому это на самом деле рекомендуется :, поскольку $выполняет аналогичную функцию в awkпри разыменовании отдельных поля ввода (, но где номер поля также может быть выражен именем переменной, как, например, $NF), заключение программы в одинарные кавычки позволяет избежать одновременного «расширения переменных».

В вашем случае вы можете "импортировать" значение в программу awkс помощью

awk -v fieldnr="$i" '{if ($NF==fieldnr) {print $NF}}'

Тем не менее, кажется, что ваша проблема может быть полностью решена в awk, поэтому, возможно, вы захотите объяснить, чего вы хотите добиться более подробно, и мы можем попытаться найти более элегантный (и, возможно, более быстрый )путь; хотя может быть разумно открыть еще один вопрос...

4
28.04.2021, 23:22
#!/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
-1
28.04.2021, 23:22

Теги

Похожие вопросы