Чтение текстового файла и использование каждой строки в качестве входных данных для функции

У меня есть файл, в котором более тысячи строк и в каждой строке есть строка из 12 символов. Еще у меня есть скрипт, в котором есть функция. Я хочу, чтобы файл читался каждый раз при выполнении функции и первые 8 символов каждой строки этого файла были получены в качестве входных данных и функция выполнялась для каждой строки файла. Я проверял подобные темы, но они мне не помогли. У меня нет возможности использовать Python, Jason и другие языки и библиотеки, кроме скрипта оболочки. Я написал следующий сценарий, который вроде бы работает правильно, но возвращает ошибку:

#!/bin/bash
input_file = "input.txt"
while IFS= read -r line; do
# Extract the first 8 characters from the line
code = "${line:0:8}"
# Dynamically build the command and execute it
eval "filterTxtforfunc(\$0,\"$code\")"
done < "$input_file"

Ошибка:

-bash: eval: строка 12: синтаксическая ошибка рядом с неожиданным токеном `$0, "PRI3ZNPZ"'

-bash: eval: строка 12: `filterTxtforfunc($0,""PRI3ZNPZ")'

filterTxtforfunc($0,""PRI3ZNPZ") — это именно то, что я хочу автоматически генерировать и автоматически использовать в своем скрипте.

input.txt выглядит следующим образом:

WRM3BHIZ0004
NRB1SAPB0122
LRT1SYGM0114
KRF1LAEI0451
JRU1TEEE0764
ZRQ1LQWS0666
PRH1DCHK0904
...

Если вы хотите напечатать текст, используйте echo, а не eval.

KamilCuk 10.08.2024 09:14

... а если хочешь вызвать filterTxtforfunc, то просто позвони: filterTxtforfunc "$0" "$code"

Ted Lyngmo 10.08.2024 09:21
В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
1
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Баш — это не питон. В bash вызов функции — это просто команда. В этом нет ничего динамичного.

filterTxtforfunc() {
   echo does something
}
input_file = "input.txt"
while IFS= read -r line; do
   # Extract the first 8 characters from the line
   code = "${line:0:8}"
   # Dynamically build the command and execute it
   filterTxtforfunc "$0" "$code"
done < "$input_file"

Рассмотрите возможность изучения введения в bash и функции bash. Не забудьте проверить свои скрипты с помощью Shellcheck.

Другие вопросы по теме