[英]Old csh alias into bash
我目前正在將一些腳本從不可讀的csh更新為bash。 我們在系統上存儲了一個本地別名,該別名在整個
alias sc 'set \!:2 = `current -\!:1 | cut -c7-`'
這使用了一個名為current的C可執行文件,我們使用該可執行文件來標識當前選擇的數據類型。 這里有5種數據類型:圖像(i),區域(r),曲線(c),文本文件(t)或列表文件(l)
該別名的用法非常簡單,可以是sc i A_image
這將找到當前選定的圖像並設置值(將是整數),並將檢索到的值設置為參數$ A_image,該參數隨后可在腳本中使用。
同樣, sc r Aregion
將找到當前選定的區域並將其設置為參數$ Aregion。
我從來沒有真正看到過csh中!:2的用法,也不知道它叫什么。 有什么辦法可以在bash中實現此功能,因為它對我們的腳本非常有用
這些似乎是類似歷史的單詞/參數選擇器。
因此, !:2
是別名的第二個參數, !:1
是別名的第一個參數。
所以sc i A_image
最終打電話
set A_image = `current -i | cut -c7-`
bash別名不能接受參數,您需要為此使用函數(無論如何,函數通常更有用)。
相當於bash 4.2+的功能是
sc() {
declare -g "$2=$(current "$1" | cut -c7-)"
}
對於bash 3.1+,它將是
sc() {
printf -v "$2" -- %s "$(current "$1" | cut -c7-)"
}
對於較舊的bash或/bin/sh
,它將是
sc() {
eval "$2=\$(current \"$1\" | cut -c7-)`"
}
但是此版本通常對於不可信的輸入是不安全的。
(以上所有功能未經測試,但應該可以正常工作。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.