bash - Bash 分号等于换行符不完全正确?
问题描述
我在多篇文章中读到过;
类似 UNIX 的 shell 中的分号 () 等于换行符。
但是,以下内容让我感到困惑,我也没有运气用谷歌搜索它。
我猜这是do
在 shell 中的一个问题,但是“bash 分号 do”并不是最适合 google 的搜索词组合。
下面是一个简单的for
说法。
for i in {1..10}
do
echo "hi"
echo "bye"
done
正如许多 Stack Overflow 专家所发布的那样,每个换行符都可以用分号代替。
所以..我们有以下“相同”的声明。
for i in {1..10}; do; echo "hi"; echo "bye"; done
我们得到:
-bash: syntax error near unexpected token `;'
分号究竟是什么?这只是一个独特的问题do
吗?
解决方案
for name [ [in [words …] ] ; ] do commands; done
我们可以看到do
紧随其后的是commands
,所以在后面使用换行符do
不会替换分号,而是空格。
复合命令的描述还说
在大多数情况下,复合命令描述中的命令列表可以通过一个或多个换行符与命令的其余部分分开,并且后面可以用换行符代替分号。
但它没有说你可以插入随机分号。“每个换行符都可以用分号代替”这句话太笼统了,而且不正确。
更多手动证据:在关于命令列表的部分中,它说(强调我的):
A
list
是一个或多个管道的序列,由运算符;
、&
、&&
或中的一个分隔,并且可选地由、或 a||
中的一个终止。;
&
newline
在这些列表运算符中,
&&
and||
具有相同的优先级,其次是;
and&
,它们具有相同的优先级。一个或多个换行符的序列可能出现在
list
分隔命令中,相当于一个分号。
因此,换行符相当于命令列表中的分号。
推荐阅读
- aws-lambda - 具有 lambda-proxy 集成和 API 模型验证的无服务器框架
- python - 在 Matplotlib 中管理同一子图上多行的刻度
- android - audioplayers 包不能在三星手机(A8 和其他一些)上播放音频,但适用于模拟器和其他品牌手机
- api - 需要 Workday REST API 端点帮助
- python - 查找列名并在整个列值中保留某些字符串
- html - Shrinking div's background color with CSS
- postgresql - 易碎测试查询
- r - R:不能将“闭包”类型强制为“双”类型的向量(时间序列预测)
- javascript - 使用 fetch() 登录后如何重定向用户
- github - 将 README.md 图像显示更改为 GitHub light-mode / dark-mode