linux - 无法从嵌套子 shell 传递变量

标签 linux bash shell variables scope

我擅长使用单个子 shell 中的变量...但这有点困难!我的目标是设置一个众所周知的“全局”(我知道它们不存在,请原谅白话)在我的 while 循环完成后使用。我想做的是测试数据库表是否已被修改以供将来在同一脚本中使用 - IE

( while read p; do
   mysql --login-path=local -e "SELECT count(id) as row_count FROM myTable"  | ( while read row_count; do

        if [ $row_count = 0 ]
        then
           mysql --login-path=local -e"INSERT INTO someTable (this, that, other) VALUES ('$p', 'generated', 'generated');";
           echo "Inserted $p into database successfully";
           modified=1;
        fi

   done modified=$modified )

done <mytextfile 

   if [ $modified = 1 ]
      then
       # complete the stuff that needs done if the DB was modified just now
   fi
)

但是我的 $modified 变量仍然返回空。我什至尝试在第一次之后使用 if 语句重置它,但无济于事。我可以在 MySQL while 循环 的末尾正确设置它,但不能在父 while 循环

处正确设置

我知道 do while readsub-shells 可能会让人感到困惑..但我认为我可能会让这比它需要的更加复杂......

最佳答案

您可能想要做的是导出变量。通过这种方式,您可以在一个脚本中定义一个变量,并在另一个不知道该变量的脚本中调用它。这是通过以下方式完成的:

export MYVAR
export NAME=value

从这里您的其他 shell 脚本将读取变量。

关于linux - 无法从嵌套子 shell 传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43748713/

相关文章:

java - 将所有传入的 qmail/vpopmail 电子邮件转发到 linux 上的程序

linux - 如何在windows中为要在linux中执行的.sh文件分配执行权限

shell - shell 脚本中的 egrep

shell - sed ,别名和引号问题

bash - Ubuntu crontab 对文件的简单回显不起作用

linux - 在 Linux 中使用 Bash 获取文件名并删除同名文件

linux - 如何在配置单元查询中使用 mysql 查询结果

c - 与gcc中的共享库链接时如何为可执行文件生成位置相关代码?

linux - 无法在 bluetoothctl 上输入

linux - 试图在用 Linux 的实际时间减去它的同时获得有意义的时间戳?