Как переназначить переменные в bash? - PullRequest
0 голосов
/ 25 марта 2020

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

Часть myscript. sh:

while getopts "s:n:e" opt; do
 case $opt in
n) name=$OPTARG;;
e) area=$OPTARG;;
s) part+=("$OPTARG");;
 esac
done
shift $((OPTIND -1))

getArray(){ for val in "${part[@]}"; do
  echo "$val"
done }

getPart(){ getArray | while read -r param1; do 
 echo "$param1" | sed 's/=.*//'}
done }
parts=$(getPart)

У меня есть info.csv файл конфигурации:

name,part,area,partcode
fiat,exhaust,store,123
fiat,engine,store,132
ford,exhaust,store,145
ford,windscreen,store,134

После запуска команды я использую grep "$name,$part,$area" info.csv | cut -d, f4 чтобы извлечь указанное поле c на основе того, что пользователь вводит в качестве значений своих флагов при запуске сценария.

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

Значения имеют неправильный формат (т. е. -s fiat=1 -s exhaust=2, и столбец, который я использую для доступа к ним в приведенной выше инструкции grep, требует, чтобы они были в этом формате fiat и exhaust), поэтому я использую sed для удаления =1 и =2.

Я хочу использовать эти теперь правильно отформатированные значения как мою переменную $part. Но у меня возникают проблемы с переназначением вновь отформатированных значений обратно в переменную $part.

Мой вопрос будет:

  1. Как переназначить переменные в bash после выполнения команды для них, чтобы получить их в правильном формате?

1 Ответ

2 голосов
/ 25 марта 2020

Если я правильно вас понимаю, вы присваиваете значение массиву ${part[@]}, а после этого хотите удалить конец строки из знака = для каждого элемента в массиве.

Вместо того, чтобы зацикливаться на массиве во втором проходе, я бы просто правильно инициализировал каждый элемент массива с самого начала следующим образом:

...
s) part+=("${OPTARG%%=*}");;
...

См. Руководство bash для более подробного объяснения о удаление соответствующего шаблона суффикса .

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