这个bash脚本中的EOL分号有什么作用?

3

我正在尝试修改一些与监视器布局脚本有关的代码

...
while read l 
do 
  dir=$(dirname $l); 
  status=$(cat $l); 
  dev=$(echo $dir | cut -d\- -f 2-); 

  if [ $(expr match  $dev "HDMI") != "0" ]
...

根据Bash手册:“分号”可以是元字符或控制操作符。我理解分号作为元字符用于同一行上连续的命令。在这种情况下,它被用作控制操作符吗?我以前没有这样使用过,并且脚本在没有它的情况下也能正常运行。我不想在不了解其用途的情况下删除或保留它。

5
不需要使用三个分号;,因为您的命令在不同的行上。 - anubhava
开发人员没有添加它们的好理由吗? - beanaroo
3
除了一些编程语言的习惯外,似乎没有明显的好理由。 - anubhava
谢谢,这让我放心了。 - beanaroo
3
我猜这是由一个需要使用分号的语言的人写的。当我从C++转到Bash时,经常发生这种情况 :)。 - Nidhoegger
3个回答

1
不,这种情况下您不需要分号。如果在一行上有多个命令,则需要在bash中使用分号。以下是一个示例,其中分号通常用于bash以使其更易读:
if [ $a -gt 12 ]; then

你可以在同一行使用分号将 ifthen 放在一起,这样代码更易读,但它们是两个不同的命令。

谢谢,我明白它在这种情况下的用途,但是对它的EOL目的感到困惑。 - beanaroo

1

这里可能存在一些思维过程,例如:

  • “即使连接成一行,这应该执行”,或者
  • “这最初是从一行中创建的”。

但在这种情况下,您需要在whileif行的末尾添加额外的分号才能使其正常工作。

所以,不,它们没有任何目的,除了程序员的坏习惯。


0
根据@anubhava在问题中的评论:

没有明显的好理由...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接