使用Bash命令批量查询Python版本失败的原因及解决方法
问题原因
你的写法错误在于引号把命令分隔符;包含在内,导致shell无法正确解析命令结构:
{python2,python3}" --version; "会被shell的大括号展开功能处理成两个完整的字符串:python2 --version;和python3 --version;- 这里的
;被引号包裹,不再是shell用来分隔命令的特殊符号,而是被当作命令名的一部分。shell会尝试查找名为python2 --version;(包含末尾空格和分号)的命令,自然找不到,因此报错。
另外,用echo {python2,python3}" --version"测试时,echo只是原样输出拼接后的字符串,不会解析其中的shell语法(比如;的命令分隔作用);而用反引号执行echo结果时,shell解析字符串的顺序和直接执行命令不同,依然无法正确识别;作为命令分隔符,所以无效。
解决方法
推荐以下几种简单可行的方式:
方法1:用for循环遍历执行(最直观稳妥)
for py in {python2,python3}; do "$py" --version; done
遍历大括号展开后的每个Python命令,逐个执行版本查询,输出清晰。
方法2:直接写两个独立命令
如果只是查询两个版本,直接写最直观:
python2 --version; python3 --version
方法3:用shell分组执行
如果需要批量处理更多命令,也可以用大括号分组:
{ python2 --version; python3 --version; }
注意大括号和命令之间要有空格,分号不能省略。
内容的提问来源于stack exchange,提问作者programmer
相关产品推荐
相关产品推荐

