簡體   English   中英

舊的csh別名變成bash

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM