旧的 csh 别名变为 bash

Old csh alias into bash

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

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

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

这个别名的用法相当简单 sc i A_image

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

同样sc r Aregion会找到当前选中的区域,并将其设置为参数$Aregion。

我从来没有真正见过!:2 在csh 中的用法,也不知道它叫什么。有什么方法可以在 bash 中实现此功能,因为它对我们的脚本非常有用

那些看起来像历史的 word/argument 选择器。

所以 !:2 是别名的第二个参数,!:1 是别名的第一个参数。

所以 sc i A_image 结束调用

set A_image = `current -i | cut -c7-`

bash 别名不能接受参数,你需要为此使用函数(无论如何函数通常更有用)。

等效的 bash 4.2+ 函数是

sc() {
    declare -g "=$(current "" | cut -c7-)"
}

对于 bash 3.1+ 它将是

sc() {
    printf -v "" -- %s "$(current "" | cut -c7-)"
}

对于年龄较大的 bash 或 /bin/sh,它将是

sc() {
    eval "=$(current \"\" | cut -c7-)`"
}

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

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