Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

大佬, 有个子shell的问题想请教下你 #104

Open
Subfire opened this issue Sep 15, 2023 · 2 comments
Open

大佬, 有个子shell的问题想请教下你 #104

Subfire opened this issue Sep 15, 2023 · 2 comments

Comments

@Subfire
Copy link

Subfire commented Sep 15, 2023

看到手册中有处:
varname=value command # 定义子进程变量并执行子进程
我就试了下几个例子:

MYSQL_PWD=Root123@ mysql -u root
这个命令可以正常执行
MYSQL_PWD=Root123@; mysql -u root
这样就不行了, 会报错 Access denied for user

那么
var1="abc" echo "$var1"
为啥不会输出 "abc"
var1="abc"; echo "$var1"
这个命令却可以输出"abc". 这里需要加分号才可以, 上面那个例子不加分号才行, 不懂是为啥

@skywind3000
Copy link
Owner

因为 mysql 是外部命令 echo 是内部命令,

var1="abc"; echo 修改的是本 shell 进程内部变量,然后再用内部命令,可以生效;
而光修改内部变量,没有透传或者 export 那么 mysql 这样的外部命令就无法感知 ;

var1=“abc” mysql 不会修改本 shell 内部变量,只是作一个跨进程透传,因此 mysql 有效,echo 无效。

@Subfire
Copy link
Author

Subfire commented Sep 15, 2023

因为 mysql 是外部命令 echo 是内部命令,

var1="abc"; echo 修改的是本 shell 进程内部变量,然后再用内部命令,可以生效; 而光修改内部变量,没有透传或者 export 那么 mysql 这样的外部命令就无法感知 ;

var1=“abc” mysql 不会修改本 shell 内部变量,只是作一个跨进程透传,因此 mysql 有效,echo 无效。

懂了, 感谢大佬!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants