旧的csh别名进入bash

时间:2015-11-04 11:55:37

标签: linux bash csh

我目前正在将一些脚本从不可读的csh世界更新为bash。我们的系统中存储了一个本地别名,在整个

中使用
sc i A_image

这使用一个名为current的C可执行文件,我们用它来识别当前选定的数据类型。这里有5种数据类型:image(i),region(r),curve(c),textfile(t)或listfile(l)

此别名的使用非常简单 sc r Aregion

这将找到当前选定的图像并设置值(将是一个整数)并将检索到的值设置为参数$ A_image,然后可以在脚本中使用。

同样{{1}}将找到当前选定的区域并将其设置为参数$ Aregion。

我从来没有真正在csh中看到过使用!:2并且不知道它叫什么。有没有办法可以在bash中实现这个功能,因为它对我们的脚本非常有用

1 个答案:

答案 0 :(得分: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-)`"
}

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

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