【发布时间】:2014-02-15 06:15:08
【问题描述】:
更新:
我正在开发一个模块化的 shell 脚本,它在不同级别的子进程中调用 usage()。脚本sample.sh 的结构如下:
sample.sh
├─ ...
├─ usage()
├─ awk
├─ usage()
├─ ...
usage() 显示有关如何使用脚本的简要信息(例如可用参数及其描述)。第一次执行时,usage() 会显示在脚本的开头。 usage() 调用的其他条件示例包括:
-
awk无法验证来自stdio或文件的输入 -
argument
--help被接收 -
发生了其他用户衍生的故障
我想从 shell 及其直接子进程 awk 调用相同的函数 usage()。
原问题:
函数,usage() of sample.sh 根据需要打印其打印语句。
$cat sample.sh
#!/bin/sh
awk '
BEGIN {
usage()
}
function usage() {
print "function inside of awk"
}
'
$./sample.sh
function inside of awk
要从awk 中取出usage() 并将其作为本地函数放在sample.sh~ 中,我尝试了:
$cat sample.sh~
#!/bin/sh
usage() {
print "function outside of awk"
}
awk '
BEGIN {
usage()
}
'
$./sample.sh~
awk: calling undefined function usage
source line number 3
正如我们所观察到的,我们在sample.sh~ 中收到“未定义函数用法”的错误消息。我应该如何改进它?
【问题讨论】:
-
awk 不是外壳,就像 C 不是外壳一样。你不应该期望能够在 awk 之外调用一个 shell 函数,而不是你可以在 C 之外调用一个 shell 函数。如果你告诉我们你想要做什么(而不是你想怎么做),并带有一些示例输入和我们可以为您提供帮助。