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 foo
krijgen omdat echo
foo
naar 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_SOURCE
is een bash-arrayvariabele die bronbestandsnamen bevat. Dus "${BASH_SOURCE[0]}"
geeft je de naam van het scriptbestand.
dirname
is een hulpprogramma van GNU coreutils dat de laatste componentuit de bestandsnaam verwijdert. Dus als je je script uitvoert door bash foo
te zeggen, "$( dirname "${BASH_SOURCE[0]}" )"
zou .
. Als je bash ../foo
zei, zou het ..
teruggeven; voor bash /some/path/foo
zou het /some/path
teruggeven.
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.