如何在bash中重写命令,但使其处理现有参数?

如何在bash中重写命令,但使其处理现有参数?,bash,Bash,我希望覆盖docker命令,以便在执行docker ps或docker service ls时,它将以我想要的格式呈现 我是从这个开始的 docker() { if [ "$*" == 'ps' ] then command docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" else eval "command docker $*"

我希望覆盖docker命令,以便在执行docker ps或docker service ls时,它将以我想要的格式呈现

我是从这个开始的

docker() {
  if [ "$*" == 'ps' ]
  then
    command docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
  else
    eval "command docker $*"
    # eval "command docker $@"
    # command docker $*
    # command docker $@
    # command docker "$*"
  fi
}
然而,当我这么做的时候,这是行不通的

docker service ls --format="table {{.Name}}\t{{.Image}}\t{{.Replicas}}\t{{.Ports}}"
但是

这似乎是因为正在处理的字符。

使用$@而不是$*来确保参数被重新引用

docker() {
  if [ "$*" = 'ps' ]
  then
    command docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
  else
    command docker "$@"
  fi
}
使用$@而不是$*以确保参数被重新引用

docker() {
  if [ "$*" = 'ps' ]
  then
    command docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
  else
    command docker "$@"
  fi
}