बैश बिल्टिन, ओएसएक्स बनाम लिनक्स - बैश

मैंने देखा कि ओएसएक्स और के बीच निर्मित printfलिनक्स वही व्यवहार नहीं करता है। मैं इस धारणा के तहत था कि एक बिल्टिन एक बिल्टिन है। यह मेरे पास होने वाले किसी भी विशिष्ट मुद्दे से संबंधित नहीं है। मैं बस इसे समझा नहीं सकता।

printf "%(+%s)Tn" -2
-bash: printf: `(": invalid format character

which printf
printf is a shell builtin
printf is /usr/bin/printf

लिनक्स

printf "%(+%s)Tn" -2
+1431027100

which printf
printf is a shell builtin
printf is /usr/bin/printf

इस बारे में कुछ जानकारी कि इसका परीक्षण कैसे किया गया था। ओएसएक्स पर मैं ब्रू के माध्यम से स्थापित बैश के संस्करण का उपयोग कर रहा हूं।

ओएसएक्स संस्करण

bash --version
GNU bash, version 4.3.33(1)-release (x86_64-apple-darwin14.1.1)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

लिनक्स संस्करण

bash --version
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

उत्तर:

उत्तर № 1 के लिए 4

%()T बैश 4.x में हालिया जोड़ा है; ओएस एक्स जहाजों में 3.2 गिरावट आई है (और यह कभी भी 4.x तक अपग्रेड होने की उम्मीद नहीं है, क्योंकि ऐप्पल सॉफ्टवेयर लाइसेंस प्राप्त जीपीएलवी 3 जहाज भेजने से इंकार कर देता है)।


अगर bash --version आपको बता रहा है कि आपके ओएस एक्स सिस्टम में 4 है, यह शायद पैथ में बैश के संस्करण की जांच करने का एक प्रश्न है, संस्करण में बनाम /bin/bash या /usr/bin/bash (जो भी आपकी स्क्रिप्ट के शेबांग, या आपके उपयोगकर्ता खाते के कॉन्फ़िगर किए गए खोल के लिए उपयोग किया जाता है)।

बैश के अपने वर्तमान संस्करण की जांच करने के लिए, उपयोग न करें bash --version (जो आपको संस्करण बताता है पाथ में पहला बैश दुभाषिया, संस्करण का नहीं वर्तमान दुभाषिया); इसके बजाए, उपयोग करें:

echo $BASH_VERSION

यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी स्क्रिप्ट PATH में पहले बैश दुभाषिया का उपयोग करती है (जो, यदि आपने एक ऐप्पल प्रदान की तुलना में एक नया बैश स्थापित किया है - जैसा कि macports या homebrew - संभवतः आप क्या चाहते हैं), उपयोग करें #!/usr/bin/env bash, नहीं #!/bin/bash


संबंधित सवाल
सबसे लोकप्रिय