Wat betekent het in shell als we een commando tussen het dollarteken en haakjes plaatsen: $(command)

Ik wil alleen de volgende regel code in shell begrijpen. Het wordt gebruikt om de huidige werkdirectory op te halen. Ik ben me ervan bewust dat de naam $(variable)de waarde binnen de naam van de variabele retourneert, maar wat moet $(command)retourneren? Retourneert het de waarde na het uitvoeren van de opdracht? In dat geval kunnen we `gebruiken om de opdracht uit te voeren.

CWD="$(cd "$(dirname $0)"; pwd)"

Dezelfde uitvoer kan uit de volgende coderegel worden gehaald, ook in een andere versie van shell

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

Ik kan de betekenis van $(cd..en $(dirname) niet begrijpen.

Kan iemand me helpen om erachter te komen hoe dit commando wordt uitgevoerd?


Antwoord 1, autoriteit 100%

Gebruik van de $zoals ${HOME}geeft de waarde van HOME. Gebruik van de $zoals $(echo foo)betekent dat wat er tussen haakjes staat in een subshell wordt uitgevoerd en dat als waarde teruggeeft. In mijn voorbeeld zou je fookrijgen omdat echofoonaar standard out

zal schrijven


Antwoord 2, autoriteit 18%

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

Kan iemand me helpen om erachter te komen hoe dit commando wordt uitgevoerd?

Laten we eens kijken naar de verschillende delen van de opdracht. BASH_SOURCEis een bash-arrayvariabele die bronbestandsnamen bevat. Dus "${BASH_SOURCE[0]}"geeft je de naam van het scriptbestand.

dirnameis een hulpprogramma van GNU coreutils dat de laatste componentuit de bestandsnaam verwijdert. Dus als je je script uitvoert door bash foote zeggen, "$( dirname "${BASH_SOURCE[0]}" )"zou .. Als je bash ../foozei, zou het ..teruggeven; voor bash /some/path/foozou het /some/pathteruggeven.

Ten slotte krijgt het hele commando "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"de absolute directory met het script dat wordt aangeroepen .

$(...)staat opdrachtvervanging toe, d.w.z. de uitvoer van een opdracht kan de opdracht zelf vervangen en kan worden genest.

Other episodes