2015-11-04 171 views
1

我目前正在將一些腳本從csh的不可讀世界更新爲bash。我們有我們的存儲系統上的本地別名這是用來在整個將舊的csh別名轉換爲bash

alias sc 'set \!:2 = `current -\!:1 | cut -c7-`' 

這將使用稱爲當前一個C可執行我們用它來識別當前選擇的數據類型。這裏有5種數據類型的圖像(I),區域(R),曲線(c),文本文件(t)或listfile中(L)

此別名的使用是相當簡單 sc i A_image

這將找到當前選中的圖像,並設置該值(它將是一個整數),並將檢索到的值設置爲參數$ A_image,稍後可以在腳本中使用該參數。

同樣,sc r Aregion將找到當前選定的區域並將其設置爲參數$ Aregion。

我從來沒有真正看到使用!:2在csh中,不知道它叫什麼。有沒有一種方法可以在bash中實現此功能,因爲它對於我們的腳本非常有用

回答

1

這些看起來像歷史一樣的單詞/參數選擇器。

所以!: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-)`" 
} 

但這版本對於不可信輸入通常是不安全的。

(以上所有功能未經測試,但應該可以正常工作。)