ENDOFMENU 有什么作用?

ENDOFMENU 有什么作用?

我已经获得了一个示例程序,我想知道<<ENDOFMENUand到底起什么ENDOFMENU作用,如果省略它并只使用 while 循环,它会不会同样起作用?

#!/bin/sh
echo "Menu test program...";
stop=0;
while test $stop -eq 0; do
cat<<ENDOFMENU
1: print the date
2,3 : print the current working directory
4: exit
ENDOFMENU
  echo; echo -e "your choice?\c"
  read reply
echo
case $reply in
    "1")
       date
;;
    "2"|"3")
       pwd
;;
    "4")
      stop=1
;;
    *)
      echo illegal choice
  esac
done

答案1

ENDOFMENU正如你的例子所用,就是所谓的这里的文件或者这里是文档。它允许使用多行字符串,而无需转义引号字符,例如'"

引用bash(1)手动的:

这种类型的重定向指示 shell 从当前源读取输入,直到看到仅包含分隔符(没有尾随空格)的行。 直到该点为止读取的所有行都将用作命令的标准输入。

here-documents 的格式为:

<<[-]word
here-document
delimiter

不对 word 执行任何参数扩展、命令替换、算术扩展或路径名扩展。如果 word 中的任何字符被引用,则分隔符是 word 上引号删除的结果,并且不会扩展此处文档中的行。如果 word 未被引用,则此处文档的所有行都将进行参数扩展、命令替换和算术扩展。在后一种情况下,字符序列 \<newline> 将被忽略,并且必须使用 \ 来引用字符 \、$ 和 `。

您在示例中展示了以下代码:

cat<<ENDOFMENU
1: print the date
2,3 : print the current working directory
4: exit
ENDOFMENU
  echo; echo -e "your choice?\c"

这使得字符串可用作流,然后使用命令将它们打印到控制台cat。最后,它会打印另一个空行,后跟字符串your choice?和转义序列,表示“不再产生输出”,并有效地删除后面的换行符。它可以重写为:

echo -e "    1: print the date
2,3 : print the current working directory
4: exit

your choice?\c"

相关内容