Jakie jest użycie polecenia quote
? Nie znalazłem żadnych informacji na ten temat, nie ma go wśród plików wykonywalnych w /bin
folderach i nie można go znaleźć wśród wbudowanych Bash. Wygląda na to, że wypisuje tylko swój pierwszy parametr, jak echo
polecenie i nic więcej.
command-line
bash
whtyger
źródło
źródło
quote
używane w tak niejasnym celu ... Brak prefiksu oznaczającego go jako „wewnętrzny”, brak dokumentacji, nic, chyba że przejdziesz do szczegółów implementacji zaawansowanej mechaniki ukończenia dystrybucji. Trochę mnie to niepokoi.Odpowiedzi:
Co to jest?
Zauważyłem, że to polecenie nie działa w mojej powłoce ( ryba, przyjazna interaktywna powłoka ). Wygląda na to, że działa tylko w trybie bash (domyślnie Ubuntu).
Co to robi? Do czego można go wykorzystać?
Dodaje cytaty, ale nie ma nowej linii. Unika także pojedynczych cudzysłowów w sposób odpowiedni dla bash. Przydaje się w skryptach cytowanie zmiennej lub innego rodzaju ciągu. Potrzebujesz tego na przykład dla ścieżek / parametrów ze spacjami. Chociaż są na to inne sposoby.
To naprawdę dziwne, że nie mogłem znaleźć żadnej dokumentacji (w sieci) na ten temat. Ale dobrze jest zobaczyć, co robi.
źródło
which
jest bezużyteczny, zarówno w interaktywnych powłokach, jak i skryptach. Użyjtype
zamiast tego.type quote
powie ci, że jest to funkcja, a nawet wyświetli definicję funkcji. Uruchomhelp type
więcej natype
wbudowanym./etc/bash_completion
, która jest~/.bashrc
domyślnie pozyskiwana , a nie/etc/bash.bashrc
tam, gdzie/etc/bash_completion
komentarz dotyczący tej sekcji jest komentowany. W/usr/share/bash-completion/
systemie Ubuntu 12.04 nie ma również folderu.quote
jest funkcją, która jest zdefiniowana (tutaj w moim systemie Debian, ale chyba tak samo jest w Ubuntu) w pliku/usr/share/bash-completion/bash_completion
, który sam jest pozyskiwany/etc/bash.bashrc
przy starcie Basha.Nigdy nie użyłbym tej funkcji! Jeśli chcesz zacytować rzeczy, aby były bezpieczne w użyciu dla powłoki, użyj
printf
tego%q
modyfikatora, ponieważ:W rzeczywistości, nawet to jest bardzo rzadko używane, zawsze są lepsze strategie dla rzeczy na wysokim poziomie, jak zwykle my, użytkownicy. Ta
quote
rzecz jest używana wewnętrznie przez niektóre niejasne rzeczy, o których nawet nie chcemy wiedzieć. Taquote
funkcja jest prawdopodobnie specyficzna dla dostawcy / dystrybucji (czytaj specyficzna dla Debiana) i prawdopodobnie nie jest w ogóle przenośna, a może nawet ulec zmianie w przyszłych wydaniach.Edytować. Właśnie sprawdziłem system Ubuntu 12.04, a
quote
funkcja jest zdefiniowana w/etc/bash_completion
, pochodzi z/etc/bash.bashrc
, sama pochodzi z/etc/profile
.Jak to ustaliłem? używając trochę heurystyki:
Sprawdź, czy
quote
pojawia się w/etc/profile
:Nie. Przejdź do następnego kroku.
Jakie pliki pochodzą
/etc/profile
?Mam
$i
(trzeba spojrzeć na źródła na co ten źródeł, ale w tym przypadku jest to pliki,/etc/profile.d/*.sh
jeśli w ogóle (i jeśli) i czytelny/etc/bash.bashrc
. Patrząc w/etc/bash.bashrc
.quote
w/etc/bash.bashrc
? tak / nie itd ...źródło
quote
faktycznie unika pojedynczych cudzysłowów, więc jest użyteczny przez powłokę. Działa tak samo dobrze, jakprintf %q
w tym przypadku użycia.my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"
. Będzie można zobaczyć coś podobnegoExpected: ~/.bashrc
,quote: ~/.bashrc
iprintf %q: /home/your_username/.bashrc
.(shopt -s extdebug; declare -F quote)
, który podaje nazwę funkcji, numer linii, w której jest zdefiniowany, i nazwę pliku, w którym jest zdefiniowany.quote
jest funkcją:Ta funkcja jest zdefiniowana gdzieś w pliku inicjującym bash. Dokładniej, jeśli używasz Ubuntu 13.04, możesz go znaleźć w
/usr/share/bash-completion/bash_completion
linii 142.Aby to sprawdzić, użyj następującego polecenia:
Jego cel jest ewidentnie jasny.
źródło
$INPUT
, która może zawierać spacje, cudzysłowy lub inne znaki, i zwracania ciągu, który jest zdecydowanie traktowany jako pojedynczy argument przez bash.