উত্তর:
foo="$(tr '[:lower:]' '[:upper:]' <<< ${foo:0:1})${foo:1}"
notQuiteCamel
হতে চেয়েছিল NotQuiteCamel
। আপনার বৈকল্পিকের পার্শ্ব প্রতিক্রিয়া রয়েছে বা বাকী ছোট হাতের কাছে বাধ্য করা হচ্ছে - সাব শেল এবং টিআর প্রক্রিয়াগুলির সংখ্যা দ্বিগুণ করার জন্য at
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&/
এবং এটি পসিক্স সেডে কাজ করবে।
এখানে "নেটিভ" পাঠ্য সরঞ্জামগুলির উপায়:
#!/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
।
শুধুমাত্র জোর করে ব্যবহার করা হচ্ছে
foo="uNcapItalizedstrIng"
echo $foo | awk '{print toupper(substr($0,0,1))tolower(substr($0,2))}'
এটি bash-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
=
অ্যাসাইনমেন্টগুলির আশেপাশে কোনও স্থান নেই । এটি এমন একটি বিষয় যা শেলচেক.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 এখন "ওয়ান টু থ্রি"
লিনাক্স এবং ওএসএক্স উভয়ের জন্য বিকল্প এবং পরিষ্কার সমাধান, এটি ব্যাশ ভেরিয়েবলগুলির সাথেও ব্যবহার করা যেতে পারে
python -c "print(\"abc\".capitalize())"
Abc ফেরত দেয়
এই একজন আমার পক্ষে কাজ করেছেন:
বর্তমান ডিরেক্টরিতে সমস্ত * পিএইচপি ফাইল অনুসন্ধান করা এবং প্রতিটি ফাইলের নামের প্রথম অক্ষরকে মূল অক্ষরে প্রতিস্থাপন করুন:
যেমন: test.php => Test.php
for f in *php ; do mv "$f" "$(\sed 's/.*/\u&/' <<< "$f")" ; done
শুধু মজাদার জন্য এখানে আপনি:
foo="bar";
echo $foo | awk '{$1=toupper(substr($1,0,1))substr($1,2)}1'
# or
echo ${foo^}
# or
echo $foo | head -c 1 | tr [a-z] [A-Z]; echo $foo | tail -c +2
# or
echo ${foo:1} | sed -e 's/^./\B&/'
ঠিক যা চেয়েছিল তা নয় তবে বেশ সহায়ক
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
}
প্রথম-বর্ণ-থেকে-নিম্ন-এক্সসি () {ভি-প্রথম-বর্ণ-থেকে-নীচে | এক্সক্লিপ-নির্বাচন ক্লিপবোর্ড}
প্রথম চরিত্রটি যদি কোনও চিঠি না হয় (তবে একটি ট্যাব, একটি স্থান এবং একটি পালিয়ে যাওয়া ডাবল উদ্ধৃতি)? আমরা কোনও চিঠি না পাওয়া পর্যন্ত এটি আরও ভাল করে পরীক্ষা করব ! তাই:
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}
উদাহরণ এবং বাকী সমস্ত ক্ষেত্রে এটি একইভাবে সত্য । দেখুন BashPitfalls # 14 ।