BASH脚本:从1行文件读取到多个全局变量

use*_*886 2 bash sed global-variables

我一直在用bash来解析并将参数文件读入多个gobal变量.我们运行HPUX和Linux环境,并且我正在尝试在BASH中使用它.它目前在sed语句中给我错误.即使我取出sed,它在循环内部读取变量,但是一旦我离开循环,值就会恢复为全局定义.尝试在文件顶部添加"#!/ bin/sh",但是这不像borne shell那样工作,注释的代码是来自HPUX系统的shell.任何帮助,将不胜感激!

set -xv

ReadStat() {
set -xv

while read EngName AllTabs Distribs DropDist BlockSet BlockExp BlockBy MaxProcs ; do
   echo "read: EngName=$EngName AllTabs=$AllTabs Distribs=$Distribs DropDist=$DropDist BlockSet=$BlockSet BlockExp=$BlockExp BlockBy=$BlockBy MaxProcs=$MaxProcs "
done < sed -e "s/||/|-|/g" -e "s/||/|-|/g" -e "s/||/|-|/g" -e "s/|/ /g" $StatFile 

#cat $StatFile |\
#  sed -e "s/||/|-|/g" -e "s/||/|-|/g" -e "s/||/|-|/g" |\
#  sed -e "s/|/ /g" |\
#  read EngName AllTabs Distribs DropDist BlockSet BlockExp BlockBy MaxProcs

}

# main() {


BaseNameIs=`basename $0 '.sh'`

StatFile=/tmp/kz.stat

EngName="it1xxx"
CronJob='Y'
Distribs='B'
DropDist='N'
AllTabs='N'
BlockSet='N'
# BlockExp=`date '+%Y%m%d%H%M'`
BlockExp=`date '+%Y%m%d'`'0000'
BlockBy='none'
MaxProcs=30

MyHost=`hostname`

ReadStat 

# main() }
Run Code Online (Sandbox Code Playgroud)

输入文件如下:

it1xxx|Y|B|N|Y|201401071110|none|30|
Run Code Online (Sandbox Code Playgroud)

gle*_*man 5

bash read命令可以处理:

vars="EngName AllTabs Distribs DropDist BlockSet BlockExp BlockBy MaxProcs"
IFS='|' read -r $vars dummy < kz.stat
for var in $vars; do echo "$var = ${!var}"; done
Run Code Online (Sandbox Code Playgroud)
EngName = it1xxx
AllTabs = Y
Distribs = B
DropDist = N
BlockSet = Y
BlockExp = 201401071110
BlockBy = none
MaxProcs = 30
Run Code Online (Sandbox Code Playgroud)

在read和for命令中都不引用是至关重要的$vars.