awesome-cheatsheets
awesome-cheatsheets copied to clipboard
大佬, 有个子shell的问题想请教下你
看到手册中有处: 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". 这里需要加分号才可以, 上面那个例子不加分号才行, 不懂是为啥
因为 mysql 是外部命令 echo 是内部命令,
var1="abc"; echo 修改的是本 shell 进程内部变量,然后再用内部命令,可以生效; 而光修改内部变量,没有透传或者 export 那么 mysql 这样的外部命令就无法感知 ;
var1=“abc” mysql 不会修改本 shell 内部变量,只是作一个跨进程透传,因此 mysql 有效,echo 无效。
因为 mysql 是外部命令 echo 是内部命令,
var1="abc"; echo 修改的是本 shell 进程内部变量,然后再用内部命令,可以生效; 而光修改内部变量,没有透传或者 export 那么 mysql 这样的外部命令就无法感知 ;
var1=“abc” mysql 不会修改本 shell 内部变量,只是作一个跨进程透传,因此 mysql 有效,echo 无效。
懂了, 感谢大佬!