मैं बैश के साथ अपने स्ट्रिंग में सिर्फ पहले पात्र को अपरकेस करना चाहता हूं।
foo="bar";
//uppercase first character
echo $foo;
"बार" प्रिंट करना चाहिए;
मैं बैश के साथ अपने स्ट्रिंग में सिर्फ पहले पात्र को अपरकेस करना चाहता हूं।
foo="bar";
//uppercase first character
echo $foo;
"बार" प्रिंट करना चाहिए;
जवाबों:
foo="$(tr '[:lower:]' '[:upper:]' <<< ${foo:0:1})${foo:1}"
notQuiteCamelमें बदलना चाहते थे NotQuiteCamel। आपके संस्करण का साइड इफेक्ट है या शेष को निचले हिस्से के लिए मजबूर करना - उप गोले और ट्र प्रक्रियाओं की संख्या को दोगुना करने की लागत पर।
bash।
बैश के साथ एक तरीका (संस्करण 4+):
foo=bar
echo "${foo^}"
प्रिंट:
Bar
"${foo,}"। सभी अक्षरों को कम करने के लिए, का उपयोग करें "${foo,,}"। सभी अक्षरों को अपरकेस करने के लिए, उपयोग करें "${foo^^}"।
${foo~}और ${foo~~}रूप में एक ही प्रभाव है ${foo^}और ${foo^^}। लेकिन मैंने कभी भी उस विकल्प का उल्लेख नहीं किया।
bad substitution
इसके साथ एक तरीका sed:
echo "$(echo "$foo" | sed 's/.*/\u&/')"
प्रिंटों:
Bar
brew install coreutils gnu-sedऔर उपसर्ग के बिना कमांड का उपयोग करने के निर्देशों का पालन करें g। जीएनयू संस्करण प्राप्त करने के बाद से इन कमांडों के ओएसएक्स संस्करण को चलाने के लिए मैंने कभी भी मूल्य नहीं लिया है।
sedइस उदाहरण में जीएनयू की आवश्यकता होगी
sed 's/./\U&/और यह POSIX sed पर काम करेगा।
$ foo="bar";
$ foo=`echo ${foo:0:1} | tr '[a-z]' '[A-Z]'`${foo:1}
$ echo $foo
Bar
यहाँ "मूल" पाठ उपकरण तरीका है:
#!/bin/bash
string="abcd"
first=`echo $string|cut -c1|tr [a-z] [A-Z]`
second=`echo $string|cut -c2-`
echo $first$second
tr [:lower:] [:upper:]एक बेहतर विकल्प है अगर उसे उन भाषाओं / स्थानों में काम करने की आवश्यकता है जो उन अक्षरों को शामिल करते हैं जो a-zया A-Zश्रेणियों में नहीं हैं।
केवल awk का उपयोग करना
foo="uNcapItalizedstrIng"
echo $foo | awk '{print toupper(substr($0,0,1))tolower(substr($0,2))}'
इसे बैश-3.2 के साथ शुद्ध बैश में भी किया जा सकता है:
# First, get the first character.
fl=${foo:0:1}
# Safety check: it must be a letter :).
if [[ ${fl} == [a-z] ]]; then
# Now, obtain its octal value using printf (builtin).
ord=$(printf '%o' "'${fl}")
# Fun fact: [a-z] maps onto 0141..0172. [A-Z] is 0101..0132.
# We can use decimal '- 40' to get the expected result!
ord=$(( ord - 40 ))
# Finally, map the new value back to a character.
fl=$(printf '%b' '\'${ord})
fi
echo "${fl}${foo:1}"
foo = $1, लेकिन मैं केवल मिल-bash: foo: command not found
=असाइनमेंट में कोई स्थान नहीं है । यह कुछ ऐसा है जो shellcheck.net आपके लिए प्रोग्रामेटिक रूप से खोजेगा ।
=एक कार्यक्रम के लिए एक तर्क के रूप (यह कैसे करता है, तो पता करने के लिए माना जाता है someprogram =चल रहा है someprogram, या नाम के एक चर करने के लिए बताए someprogram?)
यह भी काम करता है ...
FooBar=baz
echo ${FooBar^^${FooBar:0:1}}
=> Baz
FooBar=baz
echo ${FooBar^^${FooBar:1:1}}
=> bAz
FooBar=baz
echo ${FooBar^^${FooBar:2:2}}
=> baZ
और इसी तरह।
सूत्रों का कहना है:
Inroductions / ट्यूटोरियल:
केवल पहले शब्द को बड़ा करने के लिए:
foo='one two three'
foo="${foo^}"
echo $foo
ओ नी दो तीन
चर में प्रत्येक शब्द को भुनाने के लिए :
foo="one two three"
foo=( $foo ) # without quotes
foo="${foo[@]^}"
echo $foo
ओ नी टी वो टी ह्री
(बाश 4+ में काम करता है)
foo='one two three'; foo=$(for i in $foo; do echo -n "${i^} "; done) हर शब्द के लिए छोटा संकल्प। foo नाउ "वन टू थ्री" है
यह एक मेरे लिए काम किया:
वर्तमान निर्देशिका में सभी * php फ़ाइल के लिए खोज, और प्रत्येक फ़ाइल नाम के पहले अक्षर को कैपिटल लेटर में बदलें:
जैसे: test.php => Test.php
for f in *php ; do mv "$f" "$(\sed 's/.*/\u&/' <<< "$f")" ; done
बिल्कुल नहीं पूछा, लेकिन काफी मददगार
declare -u foo #When the variable is assigned a value, all lower-case characters are converted to upper-case.
foo=bar
echo $foo
BAR
और इसके विपरीत
declare -l foo #When the variable is assigned a value, all upper-case characters are converted to lower-case.
foo=BAR
echo $foo
bar
first-letter-to-lower () {
str=""
space=" "
for i in $@
do
if [ -z $(echo $i | grep "the\|of\|with" ) ]
then
str=$str"$(echo ${i:0:1} | tr '[A-Z]' '[a-z]')${i:1}$space"
else
str=$str${i}$space
fi
done
echo $str
}
first-letter-to-upper-xc () {
v-first-letter-to-upper | xclip -selection clipboard
}
first-letter-to-upper () {
str=""
space=" "
for i in $@
do
if [ -z $(echo $i | grep "the\|of\|with" ) ]
then
str=$str"$(echo ${i:0:1} | tr '[a-z]' '[A-Z]')${i:1}$space"
else
str=$str${i}$space
fi
done
echo $str
}
first-letter-to-lower-xc () {v-first-letter-to-lower | x -selection क्लिपबोर्ड}
क्या होगा यदि पहला वर्ण अक्षर नहीं है (लेकिन एक टैब, एक स्थान और एक बची हुई दोहरी बोली)? जब तक हमें कोई पत्र नहीं मिल जाता, हम उसका बेहतर परीक्षण करेंगे ! इसलिए:
S=' \"ó foo bar\"'
N=0
until [[ ${S:$N:1} =~ [[:alpha:]] ]]; do N=$[$N+1]; done
#F=`echo ${S:$N:1} | tr [:lower:] [:upper:]`
#F=`echo ${S:$N:1} | sed -E -e 's/./\u&/'` #other option
F=`echo ${S:$N:1}
F=`echo ${F} #pure Bash solution to "upper"
echo "$F"${S:(($N+1))} #without garbage
echo '='${S:0:(($N))}"$F"${S:(($N+1))}'=' #garbage preserved
Foo bar
= \"Foo bar=
$[...]) का उपयोग कर रहे हैं । आप बहुत सारे बेकार कोष्ठकों का उपयोग कर रहे हैं। आप मान रहे हैं कि स्ट्रिंग में लैटिन वर्णमाला (अक्षर उच्चारण के बारे में, या अन्य वर्णमाला में अक्षरों के बारे में कैसे अक्षर हैं?)। इस स्निपेट को प्रयोग करने योग्य बनाने के लिए आपके पास बहुत काम है! (और जब से आप रेगेक्स का उपयोग कर रहे हैं, आप लूप के बजाय पहला अक्षर खोजने के लिए रेगेक्स का उपयोग कर सकते हैं)।
tr:if [[ $S =~ ^([^[:alpha:]]*)([[:alpha:]].*) ]]; then out=${BASH_REMATCH[1]}${BASH_REMATCH[2]^}; else out=$S; fi; printf '%s\n' "$out"
echo $fooस्थिति का एक उदाहरण है जहां पार्सर शब्दों की सूची की अपेक्षा करता है ; तो आपके में echo ${F}, सामग्री की Fस्ट्रिंग-विभाजन और ग्लोब-विस्तारित हैं। यह echo ${S:$N:1}उदाहरण और बाकी सभी के लिए समान रूप से सच है । बशपिटल्स देखें # 14 ।