更新shell脚本中的全局字符串变量

yi0zb3m4  于 2023-01-31  发布在  Shell
关注(0)|答案(1)|浏览(157)

我已经定义了一个变量为list,我想在其中添加从sql派生的结果。我的shell脚本如下所示-

list=""

setLiveTables()
{
  liveTablesList=`"SELECT CalculatorName FROM TableList"`
  if echo "$liveTablesList"; then
    echo "${liveTablesList}" | while read line
    do
       trimLine=`echo $line | sed 's/ *$//g'`
       listCalc+=""${trimLine}","
    done
    list=$listCalc
}

doSomething() 
{
  setLiveTables
  # Do some curl call with data $list
  # Here list appears empty
}

doSomething

在doSomething函数中,即使从sql获得响应,我也会获得列表值,该列表始终为空。如果我将listCalc记录在setLiveTables中,我会获得其中的数据。

pes8fvy9

pes8fvy91#

有两种可能的解决方案:
1.禁用lastpipe

shopt -u lastpipe # <========= SEE HERE

list=""

setLiveTables()
{
  liveTablesList=`"SELECT CalculatorName FROM TableList"`
  if echo "$liveTablesList"; then
    echo "${liveTablesList}" | while read line
    do
       trimLine=`echo $line | sed 's/ *$//g'`
       listCalc+=""${trimLine}","
    done
    list=$listCalc
}

doSomething() 
{
  setLiveTables
  # Do some curl call with data $list
  # Here list appears empty
}

doSomething

1.拆下管道

list=""

setLiveTables()
{
  liveTablesList=`"SELECT CalculatorName FROM TableList"`
  if echo "$liveTablesList"; then
    while read line # <==== SEE HERE
    do
       trimLine=`echo $line | sed 's/ *$//g'`
       listCalc+=""${trimLine}","
    done <<< "${liveTablesList}" # <==== SEE HERE
    list=$listCalc
}

doSomething() 
{
  setLiveTables
  # Do some curl call with data $list
  # Here list appears empty
}

doSomething

正如其他人提到的,使用ShellCheck可以更早地捕获这类错误

相关问题