Я использую встроенную функцию 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
.
Мой вопрос будет:
- Как переназначить переменные в bash после выполнения команды для них, чтобы получить их в правильном формате?