bash alias: using parameters inside shell command
本问题已经有最佳答案,请猛点这里访问。
我想为某个复杂的git命令创建一个别名:
1 | git push origin HEAD:refs/for/BRANCH-NAME |
我希望命令
1 2 | alias my-push='git push origin HEAD:refs/for/$1' alias my-push='git push origin HEAD:refs/for/"$1"' |
我想知道正确的解决方案和解释为什么上面的失败。
我确实有这样的别名:
1 | alias run-schema='cd ~/sources/schema; python -m SimpleHTTPServer $1' |
它工作正常 - 没有额外的撇号/引号。
别名做文本替换。 当你说
1 | alias foo='echo $1' |
并打电话
1 | foo baz |
这被替换为
1 | echo $1 baz |
1 2 3 | alias foo='echo $1' bar() { foo; } bar qux |
这将执行
正如前面提到的,问题的解决方案是一个函数:
1 | my_push() { git push origin"HEAD:refs/for/$1"; } |
我会用一个函数做什么:
1 | my-push(){ git push origin HEAD:refs/for/"$1"; } |
你不能拥有别名的任何参数(按设计),你需要像我这样的shell函数。 此外,当您在某些变量周围放置单引号时,将永远不会评估变量。