首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >第一次调用后脚本中的Bash -编写函数定义(作为一个GOTO/跳转问题)

第一次调用后脚本中的Bash -编写函数定义(作为一个GOTO/跳转问题)
EN

Stack Overflow用户
提问于 2011-11-23 21:03:30
回答 3查看 17.3K关注 0票数 11

基本上,我想编写一个bash脚本,其中我将使用特雷多生成几个大文件,然后使用这些文件运行一些命令。

据了解(显然)在命令运行之前需要生成heredoc文件--但是,在这种安排中让我感到恼火的是,在编写命令代码之前,我还必须编写'heredoc‘语句代码。

因此,我想我应该用一个函数来编写heredoc语句--但这里的问题仍然是一样的:第24章。函数说:

函数定义必须在第一次调用之前。没有“声明”函数的方法,例如,在C中。

事实上,是这样的:

代码语言:javascript
复制
$ cat > test.sh <<EOF
testo

function testo {
  echo "a"
}
EOF

$ bash test.sh 
test.sh: line 1: testo: command not found

然后,我想也许我可以放置一些标签,然后跳过GOTO,比如(伪代码):

代码语言:javascript
复制
$ cat > test.sh <<EOF
goto :FUNCLABEL

:MAIN
testo

goto :EXIT

:FUNCLABEL
function testo {
  echo "a"
}
goto MAIN

:EXIT

..。但事实证明,巴什后藤也不存在。

我唯一的目标是-我想首先编写脚本文件的“核心”,大约有五个-六个命令;然后才在脚本文件(可能有数百行)中编写heredoc语句;遗传首先使我很难阅读代码。有什么办法做到这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-23 21:10:36

一种常见的技术是:

代码语言:javascript
复制
#!/bin/sh

main() {
  cmd_list
}

cat > file1 << EOF
big HEREDOC
EOF

main "$@"
票数 25
EN

Stack Overflow用户

发布于 2011-11-23 21:09:42

在Bash中,您必须在调用整个函数之前定义它。如果您想首先编写核心脚本,那么您可以在另一个脚本文件中编写heredoc语句,并在您愿意的时候调用它,并将返回的值(可能是)分配给您的核心脚本。

票数 4
EN

Stack Overflow用户

发布于 2011-11-23 21:12:51

BASH线性地扫描文件,并在遇到它们时执行语句,就像在命令行中那样。我看到有两种方法可以做你想做的事。首先,您可以在一个单独的文件(例如helperfile.sh)中编写代码生成的本地文档等,并使用. helperfile.sh进行源代码。这可能是最好的了。您还可以在开始时编写一个函数(可能是main),它可以执行您想要的操作,然后编写出本地文档代码,然后在底部调用main

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8249040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档