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

Mat*_*iva 2 scripting bash

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

mogrify -resize $1x$2^ -gravity center -crop $1x$2+0+0 $3
Run Code Online (Sandbox Code Playgroud)

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

cropresize.sh 110 110 *.png
Run Code Online (Sandbox Code Playgroud)

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

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

gle*_*man 7

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

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

x=$1
y=$2
shift 2
mogrify -resize ${x}x${y}^ -gravity center -crop ${x}x${y}+0+0 "$@"
Run Code Online (Sandbox Code Playgroud)