Bash
如何呼叫帶有萬用字元模式和另外兩個參數的腳本?
我有這個程式碼來重命名一堆文件:
#!/bin/bash for file in $1 do mv -i "${file}" "${file/pattern/replacement}" done
如何將“模式”和“替換”替換為 $ 2 and $ 3?
此程式碼不起作用:
#!/bin/bash for file in $1 do mv -i "${file}" "${file/$2/$3}" done
我正在嘗試使用以下 3 個參數重命名:(
file_*.jpg jpg bak
結果應該是將所有*.jpg
文件重命名為*.bak
文件)。但它所做的只是:(mv -i file_01.jpg file_01.jpg
因此不重命名任何東西,因為兩個 mv 參數是相同的,而且它在第一個文件處停止,即使有更多*.jpg
文件)。如果我手動輸入jpg
並bak
輸入 bash 腳本,而不是$2
然後$3
它確實可以工作。
你呼叫你的腳本
./script file_*.jpg jpg bak
但是
*
在傳遞給腳本之前會被擴展。假設您有文件file_1.jpg
,file_2.jpg
並且file_3.jpg
在您的文件夾中,這就是呼叫的內容:./script file_1.jpg file_2.jpg file_3.jpg jpg bak
這意味著
${1} = file_1.jpg
和${2} = file_2.jpg
。${3} = file_3.jpg
如果您編寫腳本可能會更好,例如(在您的範例中):
${1} = jpg
和${2} = bak
. 然後你可以將這些變數儲存在你的腳本中,呼叫shift 2
以擺脫它們,並簡單地通過使用循環所有位置參數for file; do # do something done