# first examle
> alias gostyle="goimports -w $(find . -type f -name '*.go' -not -path './vendor/*')"
> alias gostyle
gostyle=$'goimports -w / gofiles /'
# second example
> alias gostyle="goimports -w $(find . -type f -name 'main.go' -not -path './vendor/*')"
> alias gostyle
gostyle='goimports -w ./main.go'为什么在第一个示例中,我在命令前面有$。如何使用通配符*就在别名中。为什么我在使用第一个别名时被拒绝了权限?
发布于 2022-01-04 12:31:57
因为您使用的是双引号而不是单引号,所以在定义别名时,只执行一次$(find ...)。你最终得到的是一个带有硬编码文件列表的别名。
简单的解决方法是使用单引号而不是双引号(显然,您需要将嵌入的单引号改为双引号,或者想出不同的重构);但是更好的解决方案是使用函数而不是别名。除了向后兼容旧石器时代的Unix点文件外,基本上没有什么好的理由使用别名。
gostyle () {
goimports -w $(find . -type f -name '*.go' -not -path './vendor/*') "$@"
}(不幸的是,我不熟悉goimports;也许它需要双引号引用它的参数,或者您应该为find产生的每个结果添加一个-w。或者你真的想
gostyle () {
find . -type f -name '*.go' -not -path './vendor/*' -print0 |
xargs -0 goimports -w "$@"
}在其中,您可能希望或不希望包含"$@"。)
https://stackoverflow.com/questions/70578765
复制相似问题