如何在别名中使用通配符 *
How to use wildcard * in alias
# 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'
为什么在第一个例子中我的命令前面有$。
我如何在别名中使用通配符 *。
为什么我使用第一个别名时权限被拒绝
因为您使用的是双引号而不是单引号,所以 $(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 "$@"
}
您可能希望或不希望包括的地方 "$@"
。)
# 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'
为什么在第一个例子中我的命令前面有$。 我如何在别名中使用通配符 *。 为什么我使用第一个别名时权限被拒绝
因为您使用的是双引号而不是单引号,所以 $(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 "$@"
}
您可能希望或不希望包括的地方 "$@"
。)