首页 > 解决方案 > 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

标签: bashzsh

解决方案


推荐阅读