我目前正在将一些脚本从不可读的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中实现这个功能,因为它对我们的脚本非常有用
答案 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-)`"
}
但是这个版本对于不受信任的输入通常是不安全的。
(所有未经测试的功能,但应该可以正常工作。)