diff --git a/published/20200610 How to write functions in Bash.md b/published/20200610 How to write functions in Bash.md new file mode 100644 index 0000000000..1df7f0efc2 --- /dev/null +++ b/published/20200610 How to write functions in Bash.md @@ -0,0 +1,103 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-12323-1.html) +[#]: subject: (How to write functions in Bash) +[#]: via: (https://opensource.com/article/20/6/bash-functions) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +如何在 Bash 中编写函数 +====== + +> 通过编写函数来减少代码的冗余和维护。 + +![](https://img.linux.net.cn/data/attachment/album/202006/17/125913hf1efce5c48cebrc.jpg) + +在编程时,实际上是在定义要由计算机执行的过程procedure例程routine。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要组建工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。例如,在烤面包中,这可能是酵母培养的过程: + +``` +STIR=100 +SNOOZE=86400 + +function feed_culture { +  remove_from(pantry) +  add(flour, water) +  stir($STIR) +  sleep($SNOOZE) +} +``` + +然后,揉面和醒发面团: + +``` +KNEAD=600 +SNOOZE=7200 + +function process_dough { +  remove_from(proofing_drawer) +  knead($KNEAD) +  return_to_drawer($SNOOZE) +} +``` + +在编程中,这些子例程subroutines可以表示为函数function。函数对程序员很重要,因为它们有助于减少代码中的冗余,从而减少了所需的维护量。例如,在以编程方式烤制面包的假想场景中,如果你需要更改面团醒发的用时,只要你之前使用函数,那么你只需更改一次用时,或使用变量(在示例代码中为 `SNOOZE`)或直接在处理面团的子程序中更改用时。这样可以节省你很多时间,因为你不必通过你的代码库遍历每个可能正在醒发的面团,更不用说担心错过一个。许多 bug 是由未更改的缺失的值或执行不正确的 `sed` 命令引起的,它们希望捕获所有可能而不必手动寻找。 + +在 [Bash][2] 中,无论是在编写的脚本或在独立的文件中,定义函数和使用它们一样简单。如果将函数保存到独立的文件中。那么可以将它 `source` 到脚本中,就像 `include` C 语言或 C++ 中的库或将模块 `import` 到 Python 中一样。要创建一个 Bash 函数,请使用关键字 `function`: + +``` +function foo { +# code here +} +``` + +这是一个如何在函数中使用参数的例子(有些人为设计,因此可能会更简单): + +``` +#!/usr/bin/env bash +ARG=$1 + +function mimic { +  if [[ -z $ARG ]]; then +    ARG='world' +  fi +  echo "hello $ARG" +} + +mimic $ARG +``` + +结果如下: + +``` +$ ./mimic +hello world +$ ./mimic everybody +hello everybody +``` + +请注意脚本的最后一行,它会执行该函数。对于编写脚本的新手来说,这是一个普遍的困惑点:函数不会自动执行。它们作为*潜在的*例程存在,直到被调用。 + +如果没有调用该函数,那么函数只是被定义,并且永远不会运行。 + +如果你刚接触 Bash,请尝试在包含最后一行的情况下执行示例脚本一次,然后在注释掉最后一行的情况下再次执行示例脚本。 + +### 使用函数 + +即使对于简单的脚本,函数也是很重要的编程概念。你越适应函数,在面对一个不仅需要声明性的命令行,还需要更多动态的复杂问题时,你就会越容易。将通用函数保存在单独的文件中还可以节省一些工作,因为它将帮助你建立常用的程序,以便你可以在项目间重用它们。看看你的脚本习惯,看是否适合使用函数。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/6/bash-functions + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-window-focus.png?itok=g0xPm2kD (young woman working on a laptop) +[2]: https://opensource.com/resources/what-bash diff --git a/translated/tech/20200610 How to write functions in Bash.md b/translated/tech/20200610 How to write functions in Bash.md deleted file mode 100644 index 40b2021994..0000000000 --- a/translated/tech/20200610 How to write functions in Bash.md +++ /dev/null @@ -1,106 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: (geekpi) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How to write functions in Bash) -[#]: via: (https://opensource.com/article/20/6/bash-functions) -[#]: author: (Seth Kenlon https://opensource.com/users/seth) - -如何在 Bash 中编写函数 -====== -通过编写函数来减少代码的冗余和维护。 -![woman on laptop sitting at the window][1] - -在编程时,实际上是在定义要由计算机执行的过程或_程序_。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要设置工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。例如,在烤面包中,这可能是酵母培养的过程: - - -``` -STIR=100 -SNOOZE=86400 - -function feed_culture { -  remove_from(pantry) -  add(flour, water) -  stir($STIR) -  sleep($SNOOZE) -} -``` - -然后,揉面和醒发面团: - - -``` -KNEAD=600 -SNOOZE=7200 - -function process_dough { -  remove_from(proofing_drawer) -  knead($KNEAD) -  return_to_drawer($SNOOZE) -} -``` - -在编程中,这些子例程可以表示为_函数_。函数对程序员很重要,因为它们有助于减少代码中的冗余,从而减少了所需的维护量。例如,在以编程方式烤制面包的假想场景中,如果你需要更改面团醒发的时间,只要你之前使用函数,那么你只需更改一次时间,或使用变量(在示例代码中为 **SNOOZE**)或直接在处理面团的子程序中更改时间。这样可以节省你很多时间,因为你不必通过你的代码库遍历每个可能正在醒发的面团,更不用说担心错过一个。许多 bug 是由未更改的缺失值或执行不正确的 **`sed`** 命令引起的,它们希望捕获所有可能而不必手动寻找它们。 - -在 [Bash][2] 中,在编写的脚本或在独立的文件中定义函数都一样简单。如果将函数保存到独立的文件中。那么可以将它 `source` 到脚本中,就像 `include` C 语言或 C++ 中的库或将模块 `import` 到 Python 中一样。要创建一个 Bash 函数,请使用关键字 `function`: - - -``` -function foo { -# code here -} -``` - -这是一个如何在函数中使用参数的例子(有些人为设计,因此可能会更简单): - - -``` -#!/usr/bin/env bash -ARG=$1 - -function mimic { -  if [[ -z $ARG ]]; then -    ARG='world' -  fi -  echo "hello $ARG" -} - -mimic $ARG -``` - -结果如下: - - -``` -$ ./mimic -hello world -$ ./mimic everybody -hello everybody -``` - -请注意脚本的最后一行,它执行该函数。对于新手脚本编写人员和程序员来说,这是一个普遍的困惑点:函数不会自动执行。它们作为_潜在的_子程序存在,直到被调用。 - -如果没有调用该函数,那么函数将仅被定义并且永远不会运行。 - -如果你刚接触 Bash,请尝试在包含最后一行的情况下执行示例脚本一次,然后在注释掉最后一行的情况下再次执行示例脚本。 - -### 使用函数 - -即使对于简单的脚本,函数也是很重要的编程概念。你越适应函数,在面对一个不仅需要声明性的命令行,还需要更多动态的复杂问题时,你就会越容易。将通用函数保存在单独的文件中还可以节省一些工作,因为它将帮助你建立常用的程序,以便你可以在项目间重用它们。看看你的脚本习惯,看是否有函数适合。 - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/20/6/bash-functions - -作者:[Seth Kenlon][a] -选题:[lujun9972][b] -译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/seth -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-window-focus.png?itok=g0xPm2kD (young woman working on a laptop) -[2]: https://opensource.com/resources/what-bash