/ / Nie rozumiem deklaracji parametru bash - linux, command

Nie rozumiem deklaracji parametru bash - linux, command

Mam problem z odczytaniem tego parametru poniżej:

  1. Nie rozumiem celu używania tego $(basename "$0") skąd on pochodzi.

  2. ${BINARY%/*} wygląda na to, że próbuje uzyskać ścieżkę do katalogu, ale dlaczego właśnie tak to lubić.

DIR_NAME=$(dirname "$0")
FILE_NAME=$(basename "$0")
BINARY=`readlink ${ROOT_DIR}/${DIR_NAME}/${FILE_NAME} -f`
BIN_PATH=${BINARY%/*}

Odpowiedzi:

1 dla odpowiedzi № 1
  1. $0 jest ścieżką uruchomionego skryptu. Więc $(dirname "$0") zwraca katalog skryptu, i $(basename "$0") jest nazwą pliku.

  2. ${BINARY%/*} wyjaśniono w Rozszerzanie parametrów powłoki

${parameter%word}
${parameter%%word}
The word jest rozwijany, aby utworzyć wzór, podobnie jak w rozszerzeniu nazwy pliku. Jeśli wzorzec jest zgodny z końcową częścią rozszerzonej wartości parameter, a wynikiem rozszerzenia jest wartość parameter z najkrótszym wzorem pasującym (przypadek "%") lub najdłuższym pasującym wzorcem (przypadek "%%") usunięty.

Tak więc znajduje to końcową część $BINARY to pasuje /* i usuwa go, który zwraca część katalogu. To jest odpowiednik $(dirname "$BINARY")