【问题标题】:Old csh alias into bash旧 csh 别名转换为 bash
【发布时间】:2015-11-04 11:55:37
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: linux bash csh


    【解决方案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-)`"
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2023-03-06
      • 1970-01-01
      • 2020-08-21
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多