2015-11-04 49 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-)`" 
} 

但这版本对于不可信输入通常是不安全的。

(以上所有功能未经测试,但应该可以正常工作。)