2017-10-20 133 views
0

我想用我的終端裁剪幾張圖像。爲此我嘗試寫這個單行函數。在zsh中創建一行功能

function crop_function { convert "$1 -crop 1048x909+436+78 $1" } 

但是,如果我寫crop_function test.png轉換的幫助頁面彈出。 如果我寫:

function crop_function { echo convert "$1 -crop 1048x909+436+78 $1" } 
convert_function test.png 

輸出是正確:

convert test.png -crop 1048x909+436+78 test.png 

我在做什麼錯?

===============編輯================

它不工作的原因是逃逸。 這個人做的工作:

function crop_function { convert $1 -crop 1048x909+436+78 $1 } 

我不明白爲什麼,因爲正確呼應功能替代的變量。所以如果有人能夠澄清這一點,我會非常高興。

+1

嘗試運行'轉換「test.png -crop 1048x909 + 436 + 78 test.png」'直接。你會得到同樣的錯誤。 – melpomene

+0

啊,當然。非常感謝你! – mcocdawc

+2

問題不在於被替換的變量,而是將空白作爲單個參數的一部分傳遞,而不是分隔多個參數。 – chepner

回答

1

讓我們來看看你的函數:

function crop_function { convert "$1 -crop 1048x909+436+78 $1" } 

感謝您的報價,這傳遞一個參數convert代表
$1 -crop 1048x909+436+78 $1

這裏有一個例證:

function test_args { i=1; for arg in "[email protected]"; do echo "$((i++)): $arg"; done; } 
function test_crop_1 { test_args "$1 -crop 1048x909+436+78 $1"; } 
function test_crop_2 { test_args "$1" -crop "1048x909+436+78" "$1"; } 

運行方式:

$ test_args one two three "four five" 
1: one 
2: two 
3: three 
4: four five 

$ test_crop_1 one two 
1: one -crop 1048x909+436+78 one 

$ test_crop_2 one two 
1: one 
2: -crop 
3: 1048x909+436+78 
4: one 

現在我們已經確診的問題,我們可以修復功能:

function crop_function { convert "$1" -crop "1048x909+436+78" "$1"; } 
+0

非常感謝您的詳細解釋! – mcocdawc