如何将终端中sudo命令的输出结果存储到变量中
解决sudo命令输出存入变量时报命令不存在的问题
错误原因
你编写的赋值语句a= $( sudo xyz)存在语法错误:Shell 变量赋值规则要求等号=两侧不能有空格。
当等号后存在空格时,Shell 会将这行代码解析为「执行名为a=的命令,同时将$( sudo xyz)的输出作为环境变量传入该命令」,而非你预期的变量赋值操作,因此会抛出命令不存在的报错。
正确写法
直接删除等号两侧的空格即可,命令替换符$()内部的空格不影响执行:
a=$(sudo xyz)
执行完成后你可以通过echo "$a"验证变量值,输出应为value=2。
常见场景补充说明
- 若
sudo执行时需要输入密码,脚本非交互式运行会卡住,测试场景下可以用echo "你的sudo密码" | sudo -S xyz实现自动输密码,生产环境建议通过修改/etc/sudoers配置对应命令的免密执行权限,不要硬编码密码在脚本中。 - 若命令输出包含多行内容,后续引用变量时需要用双引号包裹
"$a",避免换行符被自动替换为空格导致格式错乱。
内容的提问来源于stack exchange,提问作者AG Tech
相关产品推荐
相关产品推荐

