是否可以创建一个名称中包含变量的别名(即没有空格)?我想将转换快捷方式(如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
答案 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