bash - bash 到 zsh 的实际语法差异,例如 'if' 中的括号
问题描述
我正在尝试将一些脚本从 bash 移动到 zsh (理想情况下,我希望它们在其中任何一个中工作)。我有两个问题,我都尝试过,但在这里和通过搜索引擎都找不到答案:
1:我在哪里可以获得 zsh语法或语义的关键差异列表,而不是 UI?很容易找到关于 zsh 有多棒的解释,如何 chsh 到它,.zshenv 是什么——但没有关于实际代码有什么不同的解释。
2:“if”中的括号是怎么回事?在 bash 中,我倾向于使用单括号,除非实际需要双括号。我的大部分 bash 代码在 zsh 中都可以正常工作,但有些单 [] "if" 会抱怨
= not found
MacOSX 和 Ubuntu 上的结果相同。搜索“找不到命令”时会得到很多点击,但如果有任何针对这种情况的结果,它们就会被掩埋。
Afaict,问题出现在像“==”这样的二元运算符,但不是像“-d”等一元运算符(下面的简单测试代码)。假设这是正确的,我可以死记硬背——但这里到底发生了什么?
A=1
B=0
echo "Equality test with double brackets"
if [[ "$A" == "$B" ]]; then
echo "A is B"
else
echo "A is not B"
fi
echo "A file test with single brackets"
if [ -d "$HOME" ]; then
echo "Home exists"
else
echo "Home does not exist"
fi
echo "Equality test with single brackets"
if [ "$A" == "$B" ]; then
echo "A is B"
else
echo "A is not B"
fi
解决方案
推荐阅读
- cucumber-java - 黄瓜功能,Java,Eclipse
- string - 将字符串列表添加到 Lucene 文档
- c++ - 通过 CMake 添加子项目
- javascript - 单元测试:存根/重新连接服务器请求中的函数
- c# - ErrorHandling Middleware catch 永远不会被捕获
- python - 查找所有坐标簇,其中簇中的每个坐标彼此之间的距离小于某个最大距离
- xamarin - 注册路线列表
- machine-learning - 除了 Mask R-CNN 之外,还有其他深度学习方法可以从卫星图像中检测和分割建筑物吗
- javascript - 如何选择复制事件的文本内容以及在进行复制事件之前如何使用它?
- typescript - 如何在 TypeScript 中一般地迭代任意对象的属性?