【问题标题】:Syntax error with regex in command alias [duplicate]命令别名中的正则表达式语法错误[重复]
【发布时间】:2015-10-28 15:42:39
【问题描述】:

我在 UNIX 中创建了一个别名,正则表达式在其中产生了问题。
我的意图是使用别名作为_enable -input,参数应该用“-”传递。
没有找到问题所在。

别名是

alias _enable="function _enable() { [[ $1 =~ ^- ]] || { echo \"Use hyphen (-) before nodes.\"; return 1; } ; [[ $# = 1 ]] && { NODE=`echo ${1##*-}`; } || { NODE=\"\"; } ; $HOME/bin/command --command=enable --node=$NODE; }; _enable $1;"

实际输出为:

SS-04:~ # _enable 1
-bash: conditional binary operator expected
-bash: syntax error near `^-'

【问题讨论】:

  • 如果只是在函数内部去掉连字符,为什么还要在参数中使用连字符?

标签: regex bash alias


【解决方案1】:

你真的不需要别名和所有引号转义。

这个功能就足够了:

_enable() {
   [[ $1 == -* ]] || { echo "Use hyphen (-) before nodes."; return 1; }
   [[ $# -eq 1 ]] && NODE="${1##*-}" || NODE=""
   $HOME/bin/command --command=enable --node="$NODE"
}

然后你可以调用:

_enable 1
Use hyphen (-) before nodes.
echo $?
1

【讨论】:

  • @anubhava ...如果我在可执行文件中添加函数 _enable 然后调用它,它工作正常。即使是我发布的那个,它也可以作为脚本正常工作。但是当我把它放在别名中时,在这种情况下只有我面临问题。您发布的那个,在将此方法添加到别名后,下面的输出即将到来...SS-04:~ # _enable -p Use hyphen (‐) before nodes. -bash: -p: command not found
  • 您根本不需要将它放在别名中。只需将此函数定义添加到您的. bashrc 文件,它将在您的 shell 中的每个位置都可用。
猜你喜欢
  • 2021-12-19
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多