我正在尝试获取 mysql 用户授权详细信息并将其回显到文件
哈里=mysql -sN -e "show grants for mysqladm";
回显$shari
GRANT ALL PRIVILEGES ON *prod_server_list.txt stage_server_list.txt user_grants1.txt user_grants.txt user_list_temp1.txt user_list_temp.txt* TO 'mysqladm'@'%' IDENTIFIED BY PASSWORD '*##############' WITH GRANT OPTION GRANT EXECUTE ON PROCEDURE `soxdv`.`chgpw` TO 'mysqladm'@'%' GRANT PROXY ON ''@'' TO 'mysqladm'@'%' WITH GRANT OPTION
正在获取目录中的 .txt 文件名
实际结果必须如下
show grants;
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for mysqladm@% |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mysqladm'@'%' IDENTIFIED BY PASSWORD '*#############################' WITH GRANT OPTION |
| GRANT EXECUTE ON PROCEDURE `soxdv`.`chgpw` TO 'mysqladm'@'%' |
| GRANT PROXY ON ''@'' TO 'mysqladm'@'%' WITH GRANT OPTION |
+------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
*.*
正在被 .txt 文件名替换
请给我建议。
答案1
您需要引用您回显的内容,否则 echo 会用它在目录中找到的与模式匹配的内容来解释通配符。这称为通配符,可以禁用。
box:[~/tmp/test]$ touch file.txt other.txt
box:[~/tmp/test]$ foo='*.txt'
box:[~/tmp/test]$ echo $foo
file.txt other.txt
nox:[~/tmp/test]$ echo '$foo'
$foo
box:[~/tmp/test]$ echo "$foo"
*.txt
box:[~/tmp/test]$ set -f
box:[~/tmp/test]$ echo $foo
*.txt
- 在上面的例子中,您可以看到,不带引号的回显将导致通配符。
- 带单引号的 Echo 将会逐字打印引号内的内容
- 使用双引号的 echo 将打印变量内容,但不会打印全局变量
- 或者,您可以使用 set 禁用通配符并自由地回显而不使用引号。
我建议根据需要使用双引号或单引号。