我擅长使用单个子 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 read
和 sub-shells
可能会让人感到困惑..但我认为我可能会让这比它需要的更加复杂......
最佳答案
您可能想要做的是导出变量。通过这种方式,您可以在一个脚本中定义一个变量,并在另一个不知道该变量的脚本中调用它。这是通过以下方式完成的:
export MYVAR
export NAME=value
从这里您的其他 shell 脚本将读取
变量。
关于linux - 无法从嵌套子 shell 传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43748713/