【问题标题】:Catching String as Argument in Bash在 Bash 中捕获字符串作为参数
【发布时间】:2015-02-03 01:30:27
【问题描述】:

我有一个用于 Git 的脚本

function push() {
  git add --all
  git commit -m $1
  git push
}

我调用它

p "Commit message"

我的问题是,我如何将p 之后的所有内容作为一个参数传递,本质上将p 之后的所有内容作为提交消息传递 - 重要的是 - 我想知道是否有一种方法可以不使用引号

【问题讨论】:

  • 在函数中使用"$*" 而不是"$1"。见Positional Parameters
  • 成功了,谢谢! d.pr/i/10wgo/F1z2FPXo
  • 使用"Commit Message""$1" 会很好;没有引用 $1 这就是问题所在。
  • 顺便说一句,最好避免使用function 关键字——只需push() { 就足以定义一个函数,这样你的函数就可以在任何POSIX shell 中工作,而不是特定于shell带有 bash 扩展。

标签: git bash shell


【解决方案1】:

如果这是您唯一的参数,您可以在脚本中使用$* 来获取所有参数。另外,引用它们:

function push() {
    git add --all
    git commit -m "$*"
    git push
 }

您也可以使用"$1",为更多参数留出位置,但在这种情况下,您必须在调用函数时使用引号(例如,$ push "Some message" 而不仅仅是$ push Some message) .它更正确,但出于此功能的目的 - 只是为了节省时间 - 它可能更有用。

无论如何,我认为拥有这样的功能并不是一个好主意。 git add 是审查您的提交、决定在其中包含什么以及为其他提交留下什么以及构建一个非常好的提交消息的好时机。此外,您通常希望延迟push,直到您有几个提交。

我建议您使用tig 之类的东西来轻松选择要展示的内容等。

【讨论】:

  • "$1" 对于单参数情况同样有效,并且可以保留传递其他参数的能力。没有引用 $1 这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
相关资源
最近更新 更多