使用名称中没有空格的变量创建bash别名

时间:2016-04-13 05:53:47

标签: linux bash alias

是否可以创建一个名称中包含变量的别名(即没有空格)?我想将转换快捷方式(如hexa)设置为二进制:

例如,当我输入:

public frmMain()
{
    new VisualStudio2012LightTheme();
    InitializeComponent();
    this.ThemeName = "VisualStudio2012Light";
}

private void frmMain_Shown(object sender, EventArgs e)
{
    this.FormElement.TitleBar.ForeColor = Color.White;
}

我想显示以下内容:

0xff

这个想法会像(这个例子显然不起作用):

11111111

2 个答案:

答案 0 :(得分:2)

bash别名不将变量作为输入。您可以改为使用函数:

$ hex_to_bin () { echo "obase=2; ibase=16; $1" | bc ;}

$ hex_to_bin 6A
1101010

答案 1 :(得分:1)

不,在bash中,别名可以处理单个单词。所以,除非你想这样做:

alias 0x00='echo 00000000'
alias 0x01='echo 00000001'

然后你不会轻易搞定它。使用该方法可以 完成(对于有限的范围),通过创建动态源脚本但会产生大量别名:

( for i in {0..255} ; do printf "alias 0x%02x='echo %d'\n" $i $i ; done ) >xyzzy_$$.sh
source xyzzy_$$.sh
rm xyzzy_$$.sh

相反,我只想选择一个函数x,你可以这样做:

pax> x ff
11111111

没有比0xff所需的更多按键,你不必担心试图强迫bash做一些它不是真的要做的事情。

这样的功能可以用:

创建
pax> x() {
...>    val=$(tr '[a-z]' '[A-Z]' <<< $1)
...>    BC_LINE_LENGTH=0 bc <<< "ibase=16;obase=2;$val"
...> }

并使用如下:

pax> x ff
11111111

pax> x 42
1000010

pax> x cB
11001011

pax> x 457365384563453653276537456354635635326535635345
10001010111001101100101001110000100010101100011010001010011011001010011001001110110010100110111010001010110001101010100011000110101011000110101001100100110010100110101011000110101001101000101

请注意使用tr将alpha强制转换为大写值。如果没有它,您可能会遇到bc将其识别为有效十六进制数字的问题。

另请注意BC_LINE_LENGTH的设置,以防止bc自动换行非常大的数字,例如您可能会看到的最后一个数字:

pax> y 457365384563453653276537456354635635326535635345
10001010111001101100101001110000100010101100011010001010011011001010\
01100100111011001010011011101000101011000110101010001100011010101100\
0110101001100100110010100110101011000110101001101000101