我正在使用getopts built-in函数将参数解析为我的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"
getPart(){ getArray | while read -r param1; do
echo "$param1" | sed 's/=.*//'}
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
根据运行脚本时用户输入的标志值提取特定字段。
每次运行脚本时,我将-s
标志使用一次,两次或三次,并使用不同的值。
值的格式错误(即-s fiat=1 -s exhaust=2
,并且我在上面的grep
语句中使用它们访问的列要求它们的格式为fiat
和exhaust
),因此我使用sed
删除=1
和=2
。
我想将这些现在正确格式化的值作为$part
变量重用。但是我在将新格式化的值重新分配回$part
变量时遇到了麻烦。
我的问题是:
- 在对命令执行命令以使其格式正确后,如何在bash中重新分配变量?
分析解答
如果我理解正确,您可以为数组${part[@]}
分配一个值,然后再为该数组中的每个元素从=
登录上删除字符串的结尾。
与其第二遍遍遍数组,不如从头开始按照以下方式正确地初始化数组的每个元素:
...
s) part+=("${OPTARG%%=*}");;
...
有关删除匹配的postfix模式的更多说明,请参见bash手册。