2016-04-13 3 views
1

Ist es möglich, einen Alias ​​zu erstellen, der eine Variable in seinem Namen enthält (d. H. ohne Leerzeichen)? Ich möchte Umwandlung Shortcuts wie Hexa binär setzen:Erstellen Sie einen Bash-Alias ​​mit einer Variablen im Namen ohne Leerzeichen

Zum Beispiel, wenn ich ein:

0xff 

Ich möchte folgendes anzuzeigen: würde

11111111 

Die Idee, etwas sein wie (in diesem Beispiel arbeitet offensichtlich nicht):

alias 0x$1='echo "obase=2; ibase=16; $1" | bc' 

Antwort

1

Nein, in bash , Aliase arbeiten an einzelnen Wörtern. Also, es sei denn, Sie tun möchten:

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

dann bist du es nicht leicht arbeiten in Gang zu bringen. Es kann (für einen begrenzten Bereich) durchgeführt wird, dass die Methode von der Erstellung eines Skripts on the fly zu beziehen, aber es wird in vielen Aliase führen:

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

Stattdessen würde ich nur entscheiden sich für eine Funktion x wo Sie tun können:

pax> x ff 
11111111 

es sind keine weiteren Tastenanschläge, als Sie für 0xff brauchen würde, und Sie müssen erneut keine Sorge um den Versuch, bash in zu zwingen, etwas zu tun, es nicht ist Verbündeter zu tun.

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

und wie folgt verwendet::

Eine solche Funktion kann erstellt werden

pax> x ff 
11111111 

pax> x 42 
1000010 

pax> x cB 
11001011 

pax> x 457365384563453653276537456354635635326535635345 
10001010111001101100101001110000100010101100011010001010011011001010011001001110110010100110111010001010110001101010100011000110101011000110101001100100110010100110101011000110101001101000101 

Notiere die Verwendung von tr Alphas in Groß Werte zu zwingen. Ohne das werden Sie wahrscheinlich Probleme mit bc bekommen, die sie als gültige Hexadezimalziffern erkennen.

Beachten Sie auch die Einstellung von BC_LINE_LENGTHbc von Auto-Verpackung mit sehr großen Zahlen zu verhindern, wie die letzten, wo man sonst sehen:

pax> y 457365384563453653276537456354635635326535635345 
10001010111001101100101001110000100010101100011010001010011011001010\ 
01100100111011001010011011101000101011000110101010001100011010101100\ 
0110101001100100110010100110101011000110101001101000101 
2

bash Aliase nimmt keine Variablen als Eingabe (n) . Sie können stattdessen eine Funktion verwenden:

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

$ hex_to_bin 6A 
1101010