awesome-cheatsheets icon indicating copy to clipboard operation
awesome-cheatsheets copied to clipboard

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

Open Subfire opened this issue 2 years ago • 2 comments

看到手册中有处: 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". 这里需要加分号才可以, 上面那个例子不加分号才行, 不懂是为啥

Subfire avatar Sep 15 '23 02:09 Subfire

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

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

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

skywind3000 avatar Sep 15 '23 03:09 skywind3000

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

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

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

懂了, 感谢大佬!

Subfire avatar Sep 15 '23 06:09 Subfire