Bash

Bash 需要額外的右括號來定義函式

  • November 26, 2022

這個站點,我得到了以下 Bash 函式來使用 ImageMagick 調整圖像大小:

smartresize() { mogrify -path $3 -filter Triangle -define filter:support=2 -thumbnail $2 -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB $1 }

當我輸入上面的內容並按下<Return>後,Bash 會提示...> 命令不完整。再次按下<Return>不會讓它消失。}在返回到標準 Bash 提示符之前,我必須輸入一個額外的右大括號。

我以前做過,但沒有觀察到這種行為。 有人可以建議我如何追查原因嗎?

更多症狀

我嘗試使用smartresize()

$ mkdir smartout # Create destination folder
$ smartresize C82A4D44-0A8B-4BBA-90DB-45F683B3D8E6rot.jpeg 2016 smartout

# Output from smartresize
mogrify: unable to open image '}': No such file or directory @ error/blob.c/OpenBlob/3537.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/562.

顯然,extra}在語法上是錯誤的,但根據 Bash,我必須輸入它。

bash表達式括在{ };中時 你需要終止;,所以:

smartresize() { mogrify -path $3 -filter Triangle -define filter:support=2 -thumbnail $2 -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB "$1"; }

引用自:https://unix.stackexchange.com/questions/726407