Использование подстановочных знаков в аргументах для скрипта bash - PullRequest
0 голосов
/ 03 мая 2020

Я хочу написать сценарий bash, который копирует последнюю строку, содержащую определенную строку, из набора файлов с одинаковыми именами в новый файл.

Например, у меня есть три файла: 1abc1.txt, 2abc2.txt и 3abc3.txt. Из этих трех файлов я хочу извлечь последнюю строку, содержащую термин «pass», и записать эти извлеченные строки в новый файл с именем «AB C .txt».

Ниже приведен скрипт bash Я придумал: (pass. sh)

#!/bin/bash

grepline pass "$1" 1 > $2

Затем я выполнил следующую команду:

./pass.sh *abc*.txt ABC.txt

Но он не создает AB C .txt файл. Вместо этого он просматривает строку «pass» только в 1abc1.txt, а затем записывает вывод в 2abc2.txt.

Я предполагаю, что мое использование групповых символов при вводе команды неверно. Кто-нибудь может подсказать, как добиться того, что я хочу сделать со сценарием?

1 Ответ

1 голос
/ 03 мая 2020

Подстановочные знаки раскрываются оболочкой перед выполнением вашего скрипта, поэтому на самом деле вы выполняете

 ./pass.sh 1abc1.txt 2abc2.txt 3abc3.txt ABC.txt

Если вам нужно передать подстановочные знаки в ваш сценарий, вы должны заключить этот аргумент в кавычки, а затем разрешить расширение оболочки это внутри скрипта

./pass.sh '*abc*.txt' ABC.txt

и скрипт должен содержать

grepline pass $1 1 > $2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...