बैश में डबल कोट्स और सिंगल कोट्स में बैकटिक्स का उपयोग करते समय अंतर


12

आउटपुट में निम्नलिखित दो निष्पादन क्यों भिन्न हैं? (मुझे अपने अंतिम आदेश में चर के लिए दोहरे उद्धरण चिह्नों की आवश्यकता है)

$ sudo su -c "echo `cat /root/root_file`"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo `cat /root/root_file`'
Yay, highly classified content!

जवाबों:


19

बैश कमांड निष्पादित होने से पहले ( इस मामले में) विस्तार की एक श्रृंखला करता है । पहले मामले में, कमांड प्रतिस्थापन इसलिए किया जाता है क्योंकि यह दोहरे उद्धरणों में है - यह आप के रूप में निष्पादित करता है, इसलिए त्रुटि। दूसरे मामले में, एकल उद्धरण विस्तार को रोकते हैं, इसलिए बैकटिक्स को तब तक प्रतिस्थापित नहीं किया जाता है जब तक कि रूट का खोल नहीं चल रहा है।sudo

Https://www.gnu.org/software/bash/manual/bashref.html#Quoting भी देखें


6

पहले उदाहरण में बैकटिक्स का मूल्यांकन आपके शेल द्वारा किया जाता है (जैसा कि आप और रूट नहीं)। के साथ प्रयास करें

sudo su -c "echo `whoami`"

सिंगल कोट्स 'के साथ दूसरे में पूरे स्ट्रिंग echo `cat /root/root_file`को रूट शेल में पास किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.