Как установить результат поиска в переменную?

Расширение переменной не происходит в одинарных кавычках, вместо этого используйте двойные кавычки.

+, так как ваша переменная будет содержать /как часть пути. с GNU sedвы должны использовать другой разделитель замены.

read -p "Enter path name: " PT
sed -i "\#path# s#.*#& $PT#" infile
-1
03.12.2019, 09:28
2 ответа
files1=`find. | grep "B02_10m.tif$"`

Вы можете попробовать это?

0
28.01.2020, 05:09

Предположим, что вы используете оболочку bash:

shopt -s globstar nullglob dotglob

./avg outAVG./**/*B02_10m.tif

Это вызовет вашу программу avgсо всеми файлами в текущем каталоге или ниже, имена файлов которых заканчиваются на B02_10m.tif. Это достигается путем включения шаблона подстановки **с помощью shopt -s globstar. Этот шаблон "рекурсивно" сопоставляется с подкаталогами. Если ваши файлы TIFF находятся в текущем каталоге , вам не нужен бит **этого шаблона.

Два других параметра оболочки гарантируют, что шаблоны подстановки соответствуют скрытым именам и что они вообще не расширяются, если совпадения нет, просто чтобы имитировать то, что вы пытаетесь сделать с помощью find.

Если вы используете оболочку zsh, вместо этого вы можете использовать

./avg outAVG./**/*B02_10m.tif(.DN)

, который сделал бы то же самое. Опять же, если вы знаете каталог, в котором хранятся изображения TIFF, вам не нужен бит **шаблона, вместо этого вы можете вставить правильный путь к этому каталогу.

В любойsh-подобной оболочке, если ваши файлы находятся в каталоге с именем $dir, вы можете использовать

./avg outAVG "$dir"/*B02_10m.tif

Это, очевидно, не будет выполнять рекурсивный поиск в подкаталогах $dir.


Ваш подход не работает по двум причинам:

  1. У вас есть синтаксическая ошибка в присвоении переменной files. Вокруг =в присваивании не может быть пробелов.

  2. При исправлении этой синтаксической ошибки вы объединяете множество отдельных имен файлов в одну строку. При этом игнорируется тот факт, что имена файлов могут содержать пробелы и символы, обычно используемые в качестве подстановочных знаков оболочки. Когда вы позже используете $filesбез кавычек, оболочка разделит строку на несколько слов по пробельным символам (по умолчанию ), а затем расширит все слова, которые выглядят как шаблоны подстановки оболочки. Это приведет к тому, что ваш код будет работать неправильно, если у вас не всегда будут очень простые имена файлов.

Для получения дополнительной информации об этих проблемах см., например,.

1
28.01.2020, 05:09

Теги

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