提取硬编码值为引用变量后Bash脚本无法正常执行的问题
问题原因及解决办法
核心问题是Bash对波浪号~的解析规则:
- 直接在命令行写
~/filename时,Bash会自动把~展开为当前用户的主目录(比如/home/username/filename) - 但当你用双引号将
~/filename赋值给变量location时,~会被当作普通字符保留,不会被解析展开。所以执行sudo -S $location时,sudo会去寻找字面名为~/filename的命令,自然找不到。
修复方案
- 去掉变量赋值的双引号,让Bash在赋值时直接展开
~:systemPassword="MY_PASSWORD" location=~/filename echo $systemPassword | sudo -S $location; - 用
$HOME替代~,$HOME在双引号中依然会被Bash解析为主目录路径:systemPassword="MY_PASSWORD" location="$HOME/filename" echo $systemPassword | sudo -S $location;
另外补充:直接在脚本中明文存储密码存在安全风险,实际使用中建议避免这种写法。
内容的提问来源于stack exchange,提问作者physicsboy
相关产品推荐
相关产品推荐

