当前位置: 首页>>技术教程>>正文


一行写功能到〜/.bashrc

,

问题描述

为什么当我尝试在.bashrc文件中仅一行查找函数时,

list(){ ls -a }

我出错了吗?

bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file

但是当我多行编写时可以吗?

list(){
    ls -a
}

最佳解决办法

bash中的函数本质上称为复合命令(或代码块)。从man bash

Compound Commands
   A compound command is one of the following:
   ...
   { list; }
          list  is simply executed in the current shell environment.  list
          must be terminated with a newline or semicolon.  This  is  known
          as  a  group  command. 

...
Shell Function Definitions
   A shell function is an object that is called like a simple command  and
   executes  a  compound  command with a new set of positional parameters.
   ... [C]ommand is usually a list of commands between { and },  but
   may  be  any command listed under Compound Commands above.

没有给出任何原因,只是语法。

由于给定的one-line函数中的列表未以换行符或;终止,因此bash会抱怨。

次佳解决办法

函数末尾需要一个;

list(){ ls -a ; }

应该管用。

bash函数定义的语法指定为

name () { list ; }

请注意,它包含一个;,它不是list的一部分。

在这个地方需要;是一种语法异常。它不是特定于bash的,它与ksh相同,但是在zsh中不需要;

第三种解决办法

换行符表示单个命令(“;”)的结尾。在单行版本中,将}解析为未终止的ls -a命令的参数。您可以查看是否这样做:

$ foo(){ echo "a" }
}
$ foo
a }

看看函数声明中的命令如何吞下尾随的花括号?

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7502.html,未经允许,请勿转载。