15 specialtecken du behöver känna till för Bash

By rik

För att verkligen bemästra Bash-skalet i Linux, macOS eller andra UNIX-baserade system, är det viktigt att förstå specialtecken som ~, *, | och >. Denna artikel hjälper dig att avkoda dessa symboler och ge dig en djupare förståelse för deras användning inom Linux-kommandosekvenser.

Vad är egentligen specialtecken?

Bash-skalet tolkar vissa tecken på ett unikt sätt. När dessa tecken skrivs i skalet, fungerar de som instruktioner eller kommandon och uppmanar systemet att utföra specifika åtgärder. Betrakta dem som en-teckens kommandon. Ibland behöver vi dock använda tecknet för dess bokstavliga betydelse, inte som en magisk symbol. Vi kommer att utforska vilka tecken som är ”speciella” eller ”meta-tecken” och hur vi kan använda dem både funktionellt och bokstavligen.

~: Din Hemkatalog

Tilde (~)-symbolen är en genväg till din hemkatalog. Med hjälp av denna symbol behöver du inte skriva hela sökvägen till din hemkatalog. Oavsett var du befinner dig i filsystemet, kan du snabbt återvända till din hemkatalog med kommandot:

cd ~

Detta kommando kan även användas med relativa sökvägar. Om du exempelvis befinner dig i en annan del av filsystemet och vill navigera till arkivkatalogen i din arbetskatalog, kan du använda tilde-symbolen:

cd ~/arbete/arkiv

.: Nuvarande Katalog

En punkt (.) representerar den aktuella katalogen. Detta tecken visas ofta i kataloglistor när du använder alternativet `-a` (alla) med `ls`:

ls -a

Du kan också använda punkten i kommandon för att referera till sökvägen till din nuvarande katalog. Om du vill köra ett skript i den nuvarande katalogen, anger du det på följande sätt:

./skript.sh

Detta instruerar Bash att leta efter filen `skript.sh` i den aktuella katalogen. På så sätt undviker du att söka i andra kataloger i din sökväg.

..: Överordnad Katalog

Dubbla punkter (..) refererar till den överordnade katalogen till den aktuella katalogen. Detta tecken kan användas för att flytta en nivå uppåt i katalogstrukturen:

cd ..

Du kan även använda detta kommando med relativa sökvägar. Om du till exempel vill gå upp en nivå i katalogstrukturen och sedan navigera till en annan katalog på samma nivå, kan du använda detta kommando:

cd ../gc_help

/: Sökvägsseparator

Snedstrecket (/) används för att separera kataloger i en sökväg:

ls ~/arbete/arkiv

Ett snedstreck i början av en sökväg representerar den kortaste möjliga katalogsökvägen, vilket är rotkatalogen. Du kan snabbt navigera till rotkatalogen med kommandot:

cd /

#: Kommentarer och Strängmanipulation

Hashtecknet (#) används oftast för att beteckna kommentarer i skalskript. All text som följer hashtecknet på en rad ignoreras av skalet.

# Detta kommer att ignoreras av Bash-skalet

Hashtecknet kan också användas för att manipulera strängar genom att ta bort text från början. Följande exempel skapar en strängvariabel med namnet `this_string` och tilldelar texten ”Dave Geek!” till den:

this_string="Dave Geek!"

Genom att använda `echo` och parametrarna `${this_string#Dave}`, kan vi ta bort ordet ”Dave” från början av strängen innan den skrivs ut:

echo How-To ${this_string#Dave}

Observera att detta inte ändrar det ursprungliga värdet på strängvariabeln:

echo $this_string

?: Jokertecken för ett Enskilt Tecken

Frågetecknet (?) är ett jokertecken som representerar exakt ett tecken i filnamnsmallar. Till exempel:

ls badge?.txt

Detta kommando matchar alla filnamn som börjar med ”badge” följt av ett enskilt tecken och filnamnstillägget ”.txt”.

Frågetecknet måste matcha ett motsvarande tecken i filnamnet. Du kan även använda flera frågetecken för att hitta filer med ett specifikt antal tecken i filnamnet:

ls ?????.txt

*: Jokertecken för Teckensekvenser

Asterisken (*) fungerar som ett jokertecken som representerar en sekvens av tecken, inklusive noll tecken:

ls badge*

Detta matchar exempelvis både ’badge.txt’ och ’badge123.txt’. Asterisken kan även användas i kombination med andra tecken:

ls source.*

[]: Teckenuppsättningar

Hakparenteser ([]) används för att skapa jokertecken som representerar en teckenuppsättning. Ett tecken i filnamnet måste matcha minst ett tecken i teckenuppsättningen:

ls badge_0[246].txt

Du kan kombinera flera teckenuppsättningar:

ls badge_[01][789].txt

Intervall kan också inkluderas i teckenuppsättningen:

ls badge_[23][1-5].txt

;: Kommandoseparator

Semicolon (;) används för att separera kommandon på samma rad:

ls > count.txt; wc -l count.txt; rm count.txt

Alla kommandon på raden kommer att utföras även om ett kommando misslyckas. Om du vill stoppa exekveringen av följande kommandon ifall ett kommando misslyckas, använd dubbla et-tecken (&&):

cd ./doesntexist && cp ~/Documents/reports/* .

&: Bakgrundsprocesser

Et-tecknet (&) används för att starta processer i bakgrunden. Detta tillåter dig att fortsätta använda terminalfönstret medan programmet körs:

gedit command_address.page &

När du startar en bakgrundsprocess, visas process-ID och du kan fortsätta använda terminalen.

<: Input-omdirigering

Vänster vinkelparentes (<) används för att omdirigera input till ett kommando från en fil eller ström:

sort < words.txt

När input omdirigeras till ett kommando, kan det bete sig annorlunda än när den läser från en namngiven fil. Exempelvis skriver `wc` normalt ut filnamnet, men när input omdirigeras, har `wc` inte längre tillgång till filnamnet:

wc words.txt
wc < words.txt

>: Output-omdirigering

Höger vinkelparentes (>) används för att omdirigera output från ett kommando till en fil:

ls > filer.txt
cat filer.txt

Felmeddelanden kan också omdirigeras genom att använda en siffra (2 för fel) tillsammans med >:

wc doesntexist.txt 2> errors.txt
cat errors.txt

|: Rörledning

Rörledningen (|) används för att kedja ihop kommandon. Output från ett kommando skickas som input till nästa:

cat words.txt | grep [cC] | sort -r

!: Logisk NOT och Historik

Utropstecknet (!) används som en logisk operator NOT och för att hantera kommandohistoriken. Följande kommando testar om en katalog som heter ”backup” inte existerar och skapar den i så fall:

[ ! -d ./backup ] && mkdir ./backup

Den logiska operatorn ! vänder på testet, vilket gör att katalogen skapas om den inte existerar. För att bekräfta att katalogen har skapats, kan du använda:

ls -l -d backup

Utropstecknet kan även användas för att återanvända kommandon från din historik:

!24

Kommandot nedan kör det föregående kommandot en gång till:

!!

$: Variabeluttryck

I Bash-skalet kan du skapa variabler för att lagra värden. Vissa variabler som miljövariabler är alltid tillgängliga. Dessa innehåller information som ditt användarnamn, hemkatalog och sökväg:

echo $USER
echo $HOME
echo $PATH

Du kan skapa dina egna variabler och referera till dem med dollartecknet ($):

ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber

Genom att använda klammerparenteser ({}) i samband med dollartecknet ($) kan du genomföra ytterligare operationer på variabelns värde.

MyString=123456qwerty

Detta skapar en variabel som innehåller en sträng av tecken:

echo ${MyString}

Använd följande kommando för att skriva ut en delsträng från position 6:

echo ${myString:6}

Om du vill skriva ut en delsträng från början med 6 tecken:

echo ${myString:0:6}

För en delsträng som börjar på position 4 med 4 tecken:

echo ${myString:4:4}

Citera Specialtecken

För att använda ett specialtecken bokstavligen (inte som ett specialtecken), behöver du ”citera” det på något sätt. Detta kan göras på tre sätt. Genom att omge texten med dubbla citattecken (”…”) hindras Bash från att tolka specialtecknen (med undantag för dollartecknet ($)):

echo "Idag är $(date)"

För att förhindra att dollartecknet tolkas, använd enkla citattecken (’…’):

echo 'Idag är $(date)'

Alternativt kan du använda ett omvänt snedstreck (\) för att förhindra att ett enskilt tecken tolkas som ett specialtecken:

echo Idag är \$(date)

Genom att memorera dessa specialtecken och deras användning kommer du att få en mycket bättre förståelse för hur Bash-skalet fungerar.

Läs mer om Bash-skalet (man-sidan)
Läs mer om miljövariabler (man-sidan)