当我使用模式作为脚本的参数时,如何防止扩展?

当我使用模式作为脚本的参数时,如何防止扩展?

我需要一个非常简单的脚本来执行此操作:

mogrify -resize $1x$2^ -gravity center -crop $1x$2+0+0 $3

这样我就可以这样称呼它:

cropresize.sh 110 110 *.png

问题在于 shell 扩展了*.png模式,而不是将其按原样传递给脚本。

我怎样才能实现这一点(脚本、别名或任何其他等效的解决方案都可以)?

答案1

由于 shell 在将参数传递给命令之前执行全局扩展,因此我无法想到透明地执行此操作:它要么由用户控制(引用参数),要么由暴力控制(完全禁用 shell 的全局扩展)和set -o noglob)。

你从错误的角度看待问题。更改脚本以接受多个文件名参数:

x=$1
y=$2
shift 2
mogrify -resize ${x}x${y}^ -gravity center -crop ${x}x${y}+0+0 "$@"

答案2

你有没有尝试过

cropresize.sh 110 110 \*.png

但我只能看到 zsh (不是 bash)像你说的那样扩展它。

相关内容