Genel olarak, kabuk, aşağıdaki gibi tanımlanmış olmaları koşuluyla, değişkenlerdeki onaltılık, sekizlik ve ondalık sayıları anlayabilir integers
:
$ declare -i v1 v2 v3 v4 v5 v6 v7
$ v1=0112
$ v2=74
$ v3=0x4a
$ v4=8#112
$ v5=10#74
$ v6=16#4a
$ v7=18#gg
echo "$v1 $v2 $v3 $v4 $v5 $v6 $v7"
74 74 74 74 74 74 304
Veya "Aritmetik Genişleme" nin sonucudur:
$ : $(( v1=0112, v2=74, v3=0x4a, v4=8#112, v5=10#74, v6=16#4a, v7=18#gg ))
$ echo "$v1 $v2 $v3 $v4 $v5 $v6 $v7"
74 74 74 74 74 74 304
Bu nedenle, değişken bir değere ait karakteri yazdırmanın tek bir yoluna ihtiyacınız vardır.
Ancak burada iki olası yol vardır:
$ var=$((0x65))
$ printf '%b\n' "\\$(printf '0%o' "$var")"
e
$ declare -i var
$ var=0x65; printf '%b\n' "\U$(printf '%08x' "$var")"
e
Biri değeri onaltılı bir dizeye dönüştürmek için iki printf, karakteri gerçekten yazdırmak için iki printf gereklidir.
İkincisi herhangi bir UNICODE noktasını basacaktır (konsolunuz doğru ayarlanmışsa).
Örneğin:
$ var=0x2603; printf '%b\n' "\U$(printf '%08x' "$var")"
☃
Bir kar adam.
Bir UTF-8 gösterimi olan karakter olarak f0 9f 90 ae
olup 0x1F42E
. Ara cow face site:fileformat.info
için bunu elde :
$ var=0x1F42F; printf '%b\n' "\U$(printf '%08x' "$var")"
🐮
Not : UNICODE yolunda, 4.3'ten önceki bash (bu sürümde ve yukarı doğru) için UNICODE noktaları 128 ve 255 (ondalık olarak) arasındaki karakterler yanlış yazdırılabilir.
Referanslar
Dördüncü paragraf içi PARAMETERS
yer man bash
:
Değişkenin tamsayı öznitelik seti varsa, $ ((...)) genişletmesi kullanılmasa bile değer aritmetik bir ifade olarak değerlendirilir (aşağıdaki Aritmetik Genişleme'ye bakın).
İçindeki "ARİTMETİK DEĞERLENDİRME" içinde man bash
:
Başında 0 olan sabitler sekizlik sayılar olarak yorumlanır. Baştaki 0x veya 0X onaltılık anlamına gelir. Aksi takdirde, sayılar [taban #] n biçimini alır; burada isteğe bağlı taban, aritmetik tabanı temsil eden 2 ile 64 arasında bir ondalık sayıdır ve n, bu tabandaki bir sayıdır. Taban # atlanırsa, taban 10 kullanılır. 9'dan büyük rakamlar, sırasıyla küçük harfler, @ ve _ büyük harfler ile temsil edilir. Taban 36'dan küçük veya ona eşitse, küçük ve büyük harfler 10 ile 35 arasındaki sayıları göstermek için birbirlerinin yerine kullanılabilir.