Apa gunanya perintah quote
? Saya belum menemukan info tentang itu, itu bukan di antara file yang dapat dieksekusi di /bin
folder, dan tidak dapat ditemukan di antara Bash built-in. Tampaknya hanya mencetak parameter pertamanya, seperti echo
perintah dan tidak lebih.
command-line
bash
whtyger
sumber
sumber
quote
, digunakan untuk tujuan yang tidak jelas ... Tidak ada awalan untuk menandainya "internal", tidak ada dokumentasi, tidak ada, kecuali Anda menggali rincian implementasi mekanisme penyelesaian lanjutan dari distro. Saya menemukan ini agak mengganggu.Jawaban:
Apa itu?
Saya perhatikan bahwa perintah ini tidak berfungsi di shell saya ( ikan, shell interaktif ramah ). Sepertinya itu hanya berfungsi di bash (default Ubuntu).
Apa fungsinya? Untuk apa itu digunakan?
Itu menambahkan tanda kutip tetapi tidak ada baris baru. Itu juga lolos dari tanda kutip tunggal dengan cara yang cocok untuk bash. Ini dapat berguna dalam skrip untuk mengutip variabel atau jenis string lainnya. Anda memerlukan ini misalnya untuk jalur / parameter dengan spasi. Meskipun ada cara lain untuk melakukan ini.
Benar-benar aneh saya tidak dapat menemukan dokumentasi (di web) tentang itu. Tapi yah, mudah untuk melihat apa fungsinya.
sumber
which
tidak berguna, baik dalam shell interaktif maupun dalam skrip. Gunakantype
sebagai gantinya.type quote
akan memberi tahu Anda itu fungsi, dan bahkan menunjukkan definisi fungsi. Jalankanhelp type
untuk lebih banyak ditype
builtin./etc/bash_completion
, yang bersumber~/.bashrc
secara default, bukan oleh/etc/bash.bashrc
bagian/etc/bash_completion
yang berkomentar. Juga/usr/share/bash-completion/
folder tidak ada dalam Ubuntu 12.04.quote
adalah fungsi yang didefinisikan (di sini di sistem Debian saya, tapi saya kira itu sama di Ubuntu) dalam file/usr/share/bash-completion/bash_completion
, yang itu sendiri bersumber pada/etc/bash.bashrc
saat startup Bash.Saya tidak akan pernah menggunakan fungsi ini! Jika Anda perlu mengutip hal-hal agar dapat digunakan dengan aman oleh shell, silakan gunakan
printf
dengan%q
pengubah, seperti:Bahkan, meskipun ini sangat jarang digunakan, selalu ada strategi yang lebih baik untuk barang-barang tingkat tinggi seperti yang biasanya dilakukan oleh kita, pengguna. Hal
quote
ini digunakan secara internal oleh beberapa hal tidak jelas yang bahkan tidak ingin kita ketahui. Iniquote
fungsi mungkin vendor / distribusi khusus (baca Debian-spesifik) dan mungkin tidak portabel sama sekali, dan bahkan mungkin berubah dalam rilis mendatang.Edit. Saya baru saja memeriksa sistem Ubuntu 12.04, dan
quote
fungsinya didefinisikan dalam/etc/bash_completion
, bersumber oleh/etc/bash.bashrc
, itu sendiri bersumber dari/etc/profile
.Bagaimana saya menentukan ini? menggunakan sedikit heuristik:
Periksa apakah
quote
muncul di/etc/profile
:Tidak. Pergi ke langkah selanjutnya.
Apa saja file yang bersumber
/etc/profile
?Saya punya
$i
(perlu melihat ke sumber untuk apa sumber ini, tetapi dalam hal ini adalah file/etc/profile.d/*.sh
jika ada (dan jika dapat dibaca) dan/etc/bash.bashrc
. Melihat/etc/bash.bashrc
.quote
di/etc/bash.bashrc
? ya / tidak, dll ...sumber
quote
benar-benar lolos dari tanda kutip tunggal, sehingga dapat digunakan oleh shell. Ini berfungsi sama baiknya denganprintf %q
kasus penggunaan ini.my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"
. Anda akan melihat sesuatu sepertiExpected: ~/.bashrc
,quote: ~/.bashrc
danprintf %q: /home/your_username/.bashrc
.(shopt -s extdebug; declare -F quote)
, yang memberi tahu Anda nama fungsi, nomor baris yang didefinisikan, dan nama file yang didefinisikan.quote
adalah fungsi:Fungsi ini didefinisikan di suatu tempat di file inisialisasi bash. Lebih tepatnya, jika Anda menggunakan Ubuntu 13.04, Anda dapat menemukannya di
/usr/share/bash-completion/bash_completion
baris 142.Gunakan perintah berikut untuk memeriksanya:
Tujuannya jelas jelas.
sumber
$INPUT
, yang mungkin berisi spasi, tanda kutip atau karakter lain, dan mengembalikan string yang jelas hanya diperlakukan sebagai argumen tunggal oleh bash.