Linux 创建一个bash别名,其名称中包含一个无空格的变量

Linux 创建一个bash别名,其名称中包含一个无空格的变量,linux,bash,alias,Linux,Bash,Alias,是否可以创建名称中包含变量的别名(即没有空格)?我想设置转换快捷方式,如从hexa到binary: 例如,当我进入时: 0xff 我想展示以下内容: 11111111 这个想法是这样的(这个例子显然不起作用): 不,在bash中,别名作用于单个单词。所以,除非你想做: alias 0x00='echo 00000000' alias 0x01='echo 00000001' 那你就不容易让它工作了。可以使用该方法(在有限的范围内)通过动态创建源代码的脚本来完成,但这将导致大量别名: ( f

是否可以创建名称中包含变量的别名(即没有空格)?我想设置转换快捷方式,如从hexa到binary:

例如,当我进入时:

0xff
我想展示以下内容:

11111111
这个想法是这样的(这个例子显然不起作用):


不,在
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"
...> }
注意使用
tr
将字母强制转换为大写值。如果不这样做,您很可能会遇到将它们识别为有效十六进制数字的问题

还要注意
BC_LINE_LENGTH
的设置,以防止
BC
自动包装非常大的数字,例如最后一个数字,否则您会看到:

pax> y 457365384563453653276537456354635635326535635345
10001010111001101100101001110000100010101100011010001010011011001010\
01100100111011001010011011101000101011000110101010001100011010101100\
0110101001100100110010100110101011000110101001101000101

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

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

$ hex_to_bin 6A
1101010
pax> y 457365384563453653276537456354635635326535635345
10001010111001101100101001110000100010101100011010001010011011001010\
01100100111011001010011011101000101011000110101010001100011010101100\
0110101001100100110010100110101011000110101001101000101
$ hex_to_bin () { echo "obase=2; ibase=16; $1" | bc ;}

$ hex_to_bin 6A
1101010