【问题标题】:Variable value reset after loop [duplicate]循环后变量值重置[重复]
【发布时间】:2018-10-11 23:25:32
【问题描述】:

这是一个简单的脚本,用于连接文件名以创建要创建的表列表。

tabnames.bash

#!/bin/bash
ADDITIONALTABLES="FXRATES ANVIL"
ls /abc/static/rtce_reports/static/*.csv | while read staticFile
do 
   staticTable=`basename $staticFile`
   echo $staticTable
   ADDITIONALTABLES=$ADDITIONALTABLES" "${staticTable%.csv}
   echo $ADDITIONALTABLES
done
echo $ADDITIONALTABLES

文件是:

$ ls /abc/static/rtce_reports/static/*.csv
/abc/static/authority.csv
/abc/static/creditRating.csv
/abc/static/creditdept.csv
/abc/static/currency.csv
/abc/static/organiationType.csv
/abc/static/sector.csv

下面是输出:

$ ./tabnames.bash
authority.csv
FXRATES ANVIL authority
creditRating.csv
FXRATES ANVIL authority creditRating
creditdept.csv
FXRATES ANVIL authority creditRating creditdept
currency.csv
FXRATES ANVIL authority creditRating creditdept currency
organiationType.csv
FXRATES ANVIL authority creditRating creditdept currency organiationType
sector.csv
FXRATES ANVIL authority creditRating creditdept currency organiationType sector
FXRATES ANVIL

一旦退出循环,ADDITIONALTABLES 的值就会重置为进入循环之前的值。

为什么?

【问题讨论】:

标签: bash shell


【解决方案1】:

这样做:

#!bin/bash
#
ls *.csv > /tmp/CSVfiles
ADDITIONALTABLES="FXRATES ANVIL"
while read staticFile
do 
   staticTable=`basename $staticFile`
   echo $staticTable
   ADDITIONALTABLES="$ADDITIONALTABLES ${staticTable%.csv}"
   echo "in $ADDITIONALTABLES"
done < /tmp/CSVfiles
echo "out $ADDITIONALTABLES"

就像其他人在 cmets 中指出的那样,管道在子外壳中运行。但是如果你使用上面的重定向,它就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多