如何在一行上定义一个函数

Ste*_*fen 5 syntax bash function

通常在移动文件时,我需要稍后相反.所以在我的.bashrc中我包含了这个工作代码:

rmv() {
  mv $2/${1##*/} ${1%/*}
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道为什么我不能把它写成一个单一的班轮.这是我试过的:

rmv() {mv $2/${1##*/} ${1%/*}}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我会收到此错误:

-bash: .bashrc: line 1: syntax error near unexpected token `{mv'
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 25

在Bash中,{不会自动将其识别为特殊/单独的令牌.所以你需要{和之间的空格mv.

另外:

  • }需要成为命令的开始; 因此,如果它不在自己的行上,则需要;终止上一个命令.
  • 最好在任何参数扩展周围使用双引号,否则当参数包含空格或特殊字符时,您将获得奇怪的行为.

所以:

rmv() { mv "$2/${1##*/}" "${1%/*}" ; }
Run Code Online (Sandbox Code Playgroud)

  • @Jason:POSIX 指定了带有空格的奇怪行为。\[[link](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_05)] 而且,不幸的是,有很多现有的 shell 脚本依赖于它。 (3认同)
  • @Timo:*Bash 参考手册*可在线获取:https://www.gnu.org/software/bash/manual/bash.html。相关部分是§3.2.5.3“分组命令”:https://www.gnu.org/software/bash/manual/bash.html#Command-Grouping。它的措辞非常不同——我的“命令开始”措辞并不是最准确的——这就是为什么你的谷歌搜索没有找到它的部分原因。 (3认同)
  • 十分感谢!它实际上是";" 我主要是想念. (2认同)