如何在shell脚本中的函数内打印变量值?

时间:2018-04-15 05:02:14

标签: linux bash shell unix subprocess

以下是我的脚本,其中我根据条件将值放在local_server变量中:

#!/bin/bash
servers=(machine981.abc.host.com luck123.pqr.host.com gond654.def.host.com)
case $(hostname -f) in
    *abc.host.com)
        local_server=("${servers[0]}")
        ;;
    *pqr.host.com)
        local_server=("${servers[1]}")
        ;;
    *def.host.com)
        local_server=("${servers[2]}")
        ;;
    *) echo "unknown host: $(hostname -f), exiting." && exit 1 ;;
    # ?
esac

# now this print works fine and it shows right value
echo $local_server

hello() {
  el=$1
  we=$2
  # but this print inside "hello" function doesn't print anything? Why?
  echo $local_server
}
export -f hello

parallel -j 3 hello {} $primary ::: ${pk[@]} &
parallel -j 3 hello {} $secondary ::: ${sk[@]} &

现在我有一个函数hello(),其中我想使用local_server变量,但看起来我不能使用它?它打印为空。这背后的原因是什么?如何在local_server函数中打印hello变量?

1 个答案:

答案 0 :(得分:0)

您有两种选择。导出变量:

export local_server

或使用env_parallel:

env_parallel -j 3 hello {} $primary ::: ${pk[@]} &

(env_parallel复制偶数数组,函数和别名 - 与您在UNIX中习惯的相反)。