У меня есть файл, в котором более тысячи строк и в каждой строке есть строка из 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
...
... а если хочешь вызвать filterTxtforfunc
, то просто позвони: filterTxtforfunc "$0" "$code"
Баш — это не питон. В 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.
Если вы хотите напечатать текст, используйте
echo
, а неeval
.