উত্তর:
foo="Hello"
foo="${foo} World"
echo "${foo}"
> Hello World
সাধারণভাবে দুটি ভেরিয়েবলকে একত্রিত করার জন্য আপনি এগুলি কেবল একের পর এক লিখতে পারেন:
a='Hello'
b='World'
c="${a} ${b}"
echo "${c}"
> Hello World
$foo
ডাবল উদ্ধৃতি ভিতরে রাখার অভ্যাসে থাকা ভাল , সেই সময়ের জন্য যখন এটি সত্যিই গুরুত্বপূর্ণ।
foo="$fooworld"
? আমি অনুমান করা হবে ...
fooworld
। যেমন বন্ধনী হিসাবে সম্পন্ন করা হয় foo="${foo}world"
...
এই কোডটিতে +=
প্রদর্শিত হিসাবে ব্যাশ অপারেটরকে সমর্থন করে :
$ A="X Y"
$ A+=" Z"
$ echo "$A"
X Y Z
export A+="Z"
বা সম্ভবত A
চলকটি একবারে রফতানি করা দরকার?
export A+=Z
পাশাপাশি বেশ সুন্দরভাবে কাজ করে।
#!/bin/sh
এই নির্মাণ ব্যবহার করে কোনও স্ক্রিপ্টে ব্যবহার করবেন না ।
bash
এবং আরও কয়েকটি আরও উন্নত শেল। এটি busybox sh
বা dash
(যা /bin/sh
অনেকগুলি ডিস্ট্রোতে রয়েছে), বা /bin/sh
ফ্রিবিএসডিতে প্রদত্ত কয়েকটি অন্যান্য শেলের অধীনে কাজ করবে না ।
যেহেতু এই প্রশ্নটি বাশের পক্ষে বিশেষভাবে দাঁড়িয়েছে , আমার উত্তরের প্রথম অংশটি সঠিকভাবে এটি করার বিভিন্ন উপায় উপস্থাপন করবে:
+=
: পরিবর্তনশীল সংযোজনসিনট্যাক্সটি +=
বিভিন্ন উপায়ে ব্যবহার করা যেতে পারে:
var+=...
(কারণ আমি মিতব্যয়ী, আমি মাত্র দুটি ভেরিয়েবল ব্যবহার করবে foo
এবং a
এবং তারপর পুরো উত্তর একই পুনরায় ব্যবহার করুন। ;-)
a=2
a+=4
echo $a
24
স্ট্যাক ওভারফ্লো প্রশ্ন সিনট্যাক্স ব্যবহার করে ,
foo="Hello"
foo+=" World"
echo $foo
Hello World
ঠিকভাবে কাজ করে!
((var+=...))
পরিবর্তনশীল a
একটি স্ট্রিং, কিন্তু একটি পূর্ণসংখ্যাও
echo $a
24
((a+=12))
echo $a
36
var+=(...)
আমাদের a
এছাড়াও একটি মাত্র উপাদান একটি অ্যারে।
echo ${a[@]}
36
a+=(18)
echo ${a[@]}
36 18
echo ${a[0]}
36
echo ${a[1]}
18
নোট করুন যে প্রথম বন্ধনীগুলির মধ্যে একটি স্পেস বিভাজিত অ্যারে রয়েছে । আপনি যদি আপনার অ্যারেতে ফাঁকা স্থানগুলি যুক্ত স্ট্রিং সঞ্চয় করতে চান তবে আপনাকে সেগুলি বন্ধ করতে হবে:
a+=(one word "hello world!" )
bash: !": event not found
হুম .. এটি কোনও বাগ নয়, তবে একটি বৈশিষ্ট্য ... ব্যাশের বিকাশের চেষ্টা করতে বাধা দিতে !"
, আপনি করতে পারেন:
a+=(one word "hello world"! 'hello world!' $'hello world\041')
declare -p a
declare -a a='([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!" [5]="h
ello world!" [6]="hello world!")'
printf
: বিল্টিন কমান্ড ব্যবহার করে ভেরিয়েবলটি পুনর্নির্মাণ করুনprintf
Builtin কমান্ড স্ট্রিং বিন্যাস অঙ্কন একটি শক্তিশালী উপায় দেয়। যেহেতু এটি বাশ অন্তর্নির্মিত , তাই মুদ্রণের পরিবর্তে ভেরিয়েবেলে ফর্ম্যাট স্ট্রিং প্রেরণের বিকল্প রয়েছে stdout
:
echo ${a[@]}
36 18 one word hello world! hello world! hello world!
এই অ্যারেটিতে সাতটি স্ট্রিং রয়েছে। সুতরাং আমরা ঠিক সাতটি স্থিতি যুক্তি সমন্বিত একটি ফর্ম্যাট স্ট্রিং তৈরি করতে পারি:
printf -v a "%s./.%s...'%s' '%s', '%s'=='%s'=='%s'" "${a[@]}"
echo $a
36./.18...'one' 'word', 'hello world!'=='hello world!'=='hello world!'
অথবা আমরা একটি আর্গুমেন্ট ফর্ম্যাট স্ট্রিং ব্যবহার করতে পারি যা জমা দেওয়া যত যুক্তি পুনরাবৃত্তি হবে ...
আমাদের a
এখনও একটি অ্যারে নোট করুন ! শুধুমাত্র প্রথম উপাদান পরিবর্তন করা হয়!
declare -p a
declare -a a='([0]="36./.18...'\''one'\'' '\''word'\'', '\''hello world!'\''=='\
''hello world!'\''=='\''hello world!'\''" [1]="18" [2]="one" [3]="word" [4]="hel
lo world!" [5]="hello world!" [6]="hello world!")'
বাশের অধীনে, আপনি যখন সূচি নির্দিষ্ট না করে কোনও পরিবর্তনশীল নাম অ্যাক্সেস করেন, আপনি সর্বদা কেবল প্রথম উপাদানটিকেই সম্বোধন করেন!
সুতরাং আমাদের সাতটি ক্ষেত্রের অ্যারে পুনরুদ্ধার করতে, আমাদের কেবলমাত্র 1 ম উপাদানটি পুনরায় সেট করতে হবে:
a=36
declare -p a
declare -a a='([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!" [5]="he
llo world!" [6]="hello world!")'
অনেক যুক্তি সহ একটি আর্গুমেন্ট ফর্ম্যাট স্ট্রিং এতে চলে গেছে:
printf -v a[0] '<%s>\n' "${a[@]}"
echo "$a"
<36>
<18>
<one>
<word>
<hello world!>
<hello world!>
<hello world!>
foo="Hello"
printf -v foo "%s World" $foo
echo $foo
Hello World
নোট: ব্যবহার ডাবল কোট স্ট্রিং যেগুলিতে সাধিত জন্য দরকারী হতে পারে spaces
, tabulations
এবং / অথবাnewlines
printf -v foo "%s World" "$foo"
অধীনে POSIX শেল, আপনি ব্যবহার করতে পারে bashisms , তাই নেই builtin printf
।
তবে আপনি কেবল এটি করতে পারেন:
foo="Hello"
foo="$foo World"
echo $foo
Hello World
printf
আপনি যদি আরও পরিশীলিত নির্মাণ ব্যবহার করতে চান তবে আপনাকে কাঁটাচামচ ব্যবহার করতে হবে (নতুন শিশু প্রক্রিয়া যা কাজ করে এবং এর মাধ্যমে ফলাফলটি ফিরিয়ে দেয় stdout
):
foo="Hello"
foo=$(printf "%s World" "$foo")
echo $foo
Hello World
Orতিহাসিকভাবে , আপনি কাঁটাচামচের ফলাফল পুনরুদ্ধার করতে ব্যাকটিক্স ব্যবহার করতে পারেন :
foo="Hello"
foo=`printf "%s World" "$foo"`
echo $foo
Hello World
তবে বাসা বাঁধার পক্ষে এটি সহজ নয় :
foo="Today is: "
foo=$(printf "%s %s" "$foo" "$(date)")
echo $foo
Today is: Sun Aug 4 11:58:23 CEST 2013
ব্যাকটিক্স সহ, আপনাকে ব্যাকস্ল্যাশগুলি সহ অভ্যন্তরীণ কাঁটাচামচ ছেড়ে দিতে হবে :
foo="Today is: "
foo=`printf "%s %s" "$foo" "\`date\`"`
echo $foo
Today is: Sun Aug 4 11:59:10 CEST 2013
+=
অপারেটর এছাড়াও অনেক দ্রুত চেয়ে $a="$a$b"
আমার পরীক্ষা .. কোন জ্ঞান করে তোলে।
var=${var}.sh
অন্যান্য উত্তর থেকে উদাহরণটি হারিয়েছে , যা খুব দরকারী।
bash
শুধুমাত্র সঙ্গে শেল +=
অপারেটর? আমি এটি দেখতে পোর্টেবল যথেষ্ট কিনা তা দেখতে চাই
+=
অপারেটর সহ একমাত্র শেল নই , তবে এই সমস্ত উপায় বাশিজম , তাই বহনযোগ্য নয়! এমনকি ভুল বাশ সংস্করণের ক্ষেত্রেও আপনি বিশেষ বাগের মুখোমুখি হতে পারেন!
তুমিও এটা করতে পার:
$ var="myscript"
$ echo $var
myscript
$ var=${var}.sh
$ echo $var
myscript.sh
var=myscript;var=$var.sh;echo $var
একই প্রভাব ফেলতে পারে (ব্যাশ, ড্যাশ, ব্যস্তবক্স এবং অন্যদের অধীনে এই কাজ)।
echo $var2
উত্পাদন করে নাmyscript2
.
ভেরিয়েবলের নামে অবৈধ of অন্যথায় echo ${var}2
বা আমার উত্তর দেখুন
bla=hello
laber=kthx
echo "${bla}ohai${laber}bye"
আউটপুট হবে
helloohaikthxbye
এটি কার্যকর হয় যখন
$blaohai
ভেরিয়েবলটি খুঁজে না পাওয়া ত্রুটির দিকে নিয়ে যায়। অথবা আপনার স্ট্রিংগুলিতে ফাঁকা স্থান বা অন্যান্য বিশেষ অক্ষর থাকলে। "${foo}"
আপনি এতে যে কোনও কিছু রেখেছিলেন তা সঠিকভাবে পালিয়ে যায়।
foo="Hello "
foo="$foo World"
আমি সমস্যার সমাধান করার উপায়টি ঠিক is
$a$b
উদাহরণ স্বরূপ,
a="Hello"
b=" World"
c=$a$b
echo "$c"
যা উত্পাদন করে
Hello World
যদি আপনি অন্য স্ট্রিং দিয়ে একটি স্ট্রিং যুক্ত করতে চেষ্টা করেন, উদাহরণস্বরূপ,
a="Hello"
c="$a World"
তারপর echo "$c"
উত্পাদন করা হবে
Hello World
একটি অতিরিক্ত স্থান সঙ্গে।
$aWorld
আপনি কল্পনা করতে পারেন হিসাবে কাজ করে না, কিন্তু
${a}World
উত্পাদন করে
HelloWorld
${a}\ World
উত্পাদন করেHello World
c=$a$b
এখানে প্রত্যাশা করতাম যে একই কাজটি c=$a World
করবে (যা World
কমান্ড হিসাবে চালানোর চেষ্টা করবে )। আমি অনুমান করি যে ভেরিয়েবলগুলি প্রসারিত হওয়ার আগে অ্যাসাইনমেন্টটি পার্স করা হয়েছে ..
এখানে বেশিরভাগ উত্তর কী বলছে তার একটি সংক্ষিপ্তসার এখানে দেওয়া হল।
ধরা যাক আমাদের দুটি ভেরিয়েবল রয়েছে এবং $ 1 'এক'তে সেট করা আছে:
set one two
a=hello
b=world
টেবিল নীচের বিভিন্ন প্রেক্ষিতে যেখানে আমরা মান একত্রিত করতে পারেন ব্যাখ্যা a
এবং b
, একটি নতুন পরিবর্তনশীল তৈরি করতে c
।
Context | Expression | Result (value of c)
--------------------------------------+-----------------------+---------------------
Two variables | c=$a$b | helloworld
A variable and a literal | c=${a}_world | hello_world
A variable and a literal | c=$1world | oneworld
A variable and a literal | c=$a/world | hello/world
A variable, a literal, with a space | c=${a}" world" | hello world
A more complex expression | c="${a}_one|${b}_2" | hello_one|world_2
Using += operator (Bash 3.1 or later) | c=$a; c+=$b | helloworld
Append literal with += | c=$a; c+=" world" | hello world
কয়েকটি নোট:
+=
পারফরম্যান্সের দিক থেকে আরও ভাল যদি ছোট ইনক্রিমেন্টে বিশেষত একটি লুপে একটি বড় স্ট্রিং নির্মিত হয়{}
(উপরে সারণিতে সারি 2 হিসাবে) তাদের সম্প্রসারণ দুর্বোধ্য পরিবর্তনশীল নামের প্রায়। 3 এবং 4 সারিগুলিতে যেমন দেখা যায়, ততক্ষণ কোনও {}
ভেরিয়েবলের সাথে স্ট্রিংটি সংযুক্ত না করা হয় যা শেল ভেরিয়েবল নামের একটি বৈধ প্রথম অক্ষর, যা বর্ণমালা বা আন্ডারস্কোর দ্বারা শুরু হয়।আরো দেখুন:
তবুও অন্য পদ্ধতির ...
> H="Hello "
> U="$H""universe."
> echo $U
Hello universe.
... এবং এখনও অন্য একটি।
> H="Hello "
> U=$H"universe."
> echo $U
Hello universe.
যদি আপনি আন্ডারস্কোরের মতো কিছু যুক্ত করতে চান তবে এসেসপ (escape) ব্যবহার করুন
FILEPATH=/opt/myfile
এটি কাজ করে না :
echo $FILEPATH_$DATEX
এটি সূক্ষ্মভাবে কাজ করে:
echo $FILEPATH\\_$DATEX
echo $a\_$b
তা করবে। নিক ও'লাইয়ের মন্তব্যে ইঙ্গিত হিসাবে আন্ডারস্কোর একটি নিয়মিত চরিত্র। সাদা জায়গাগুলি হ্যান্ডলিং স্ট্রিং, ইকো এবং কনটেনটেশনের জন্য অনেক বেশি সংবেদনশীল --- \
এই সমস্যাটি এখন থেকে আবার আসার পরে কেউ এই থ্রেডটি পুরোপুরি ব্যবহার করতে এবং পড়তে পারেন ।
উদ্ধৃতি চিহ্ন সহ সহজ উপায়:
B=Bar
b=bar
var="$B""$b""a"
echo "Hello ""$var"
var=$B$b"a"; echo Hello\ $var
করি, আমি বিশ্বাস করি
আপনি উদ্ধৃতিগুলি ছাড়াই সম্মিলিত করতে পারেন। এখানে একটি উদাহরণ:
$Variable1 Open
$Variable2 Systems
$Variable3 $Variable1$Variable2
$echo $Variable3
এই শেষ বিবৃতিটি "ওপেনসিস্টেমগুলি" (উদ্ধৃতি ব্যতীত) মুদ্রণ করবে।
এটি বাশ স্ক্রিপ্টের উদাহরণ:
v1=hello
v2=world
v3="$v1 $v2"
echo $v3 # Output: hello world
echo "$v3" # Output: hello world
এমনকি যদি এখন + = অপারেটরটির অনুমতি দেওয়া হয় তবে এটি 2004 সালে বাশ 3.1 এ চালু হয়েছিল ।
পুরানো বাশ সংস্করণে এই অপারেটরটি ব্যবহার করে যে কোনও স্ক্রিপ্ট আপনার ভাগ্যবান যদি "কমান্ড পাওয়া যায় না" ত্রুটি বা "অপ্রত্যাশিত টোকেনের নিকটে সিনট্যাক্স ত্রুটি" দিয়ে ব্যর্থ হয়।
পশ্চাদপদ সামঞ্জস্যতা সম্পর্কে যারা চিন্তা করেন তাদের জন্য, নির্বাচিত উত্তরে উল্লিখিত মতগুলি পুরানো স্ট্যান্ডার্ড বাশ কনটেনটেশন পদ্ধতিগুলির সাথে লেগে থাকুন:
foo="Hello"
foo="$foo World"
echo $foo
> Hello World
আমি ${}
স্ট্রিংয়ে ভেরিয়েবল প্রসারণের জন্য কোঁকড়া বন্ধনী ব্যবহার করতে পছন্দ করি :
foo="Hello"
foo="${foo} World"
echo $foo
> Hello World
কোঁকড়ানো বন্ধনীগুলি ধারাবাহিক স্ট্রিং ব্যবহারের সাথে খাপ খায়:
foo="Hello"
foo="${foo}World"
echo $foo
> HelloWorld
অন্যথায় ব্যবহার foo = "$fooWorld"
কাজ করবে না।
আপনি যা করার চেষ্টা করছেন তা যদি স্ট্রিংটিকে কয়েকটি লাইনে বিভক্ত করা হয় তবে আপনি ব্যাকস্ল্যাশ ব্যবহার করতে পারেন:
$ a="hello\
> world"
$ echo $a
helloworld
এর মধ্যে একটি স্থান সহ:
$ a="hello \
> world"
$ echo $a
hello world
এটির মধ্যে একটি মাত্র স্থান যুক্ত করে:
$ a="hello \
> world"
$ echo $a
hello world
নিরাপদ উপায়:
a="AAAAAAAAAAAA"
b="BBBBBBBBBBBB"
c="CCCCCCCCCCCC"
d="DD DD"
s="${a}${b}${c}${d}"
echo "$s"
AAAAAAAAAAAABBBBBBBBBBBBCCCCCCCCCCCCDD DD
স্পেস সহ স্ট্রিংগুলি কমান্ডের অংশ হতে পারে, এই ত্রুটিগুলি এড়াতে "$ XXX" এবং "$ {XXX}" ব্যবহার করুন।
প্লাস + + সম্পর্কে অন্যান্য উত্তর একবার দেখুন
d=DD DD
দিতে হবে DD: command not found
--- নোট যে শেষ ডিডি, বরং ডি যে পাওয়া যায় নি। যদি সমস্ত অপারেন্ডগুলি যথাযথভাবে ফর্ম্যাট করা থাকে এবং ইতিমধ্যে প্রয়োজনীয় স্থানগুলি অন্তর্ভুক্ত থাকে, তবে আপনি s=${a}${b}${c}${d}; echo $s
কম উদ্ধৃতি চিহ্ন সহ সহজভাবে সংমিশ্রণ করতে পারেন । এছাড়াও আপনি \
এই সমস্যাগুলি এড়াতে (পলিত শ্বেতস্থান) ব্যবহার করতে পারেন --- d=echo\ echo
কোনও প্রতিধ্বনির প্রবর্তন করবে না, যেখানে d=echo echo
হবে।
a="Hello,"
a=$a" World!"
echo $a
এইভাবে আপনি দুটি স্ট্রিং সংযুক্ত করেন।
এটি যদি আপনার " World"
মূল স্ট্রিংয়ে যোগ করার উদাহরণ হিসাবে থাকে তবে তা হতে পারে:
#!/bin/bash
foo="Hello"
foo=$foo" World"
echo $foo
আউটপুট:
Hello World
var1='hello'
var2='world'
var3=$var1" "$var2
echo $var3
var3=$var1\ $var2
একই প্রভাব রয়েছে
কর্মক্ষমতা সম্পর্কে ভয়েসড উদ্বেগ রয়েছে, তবে কোনও ডেটা অফার করা হয় না। আমাকে একটি সহজ পরীক্ষা পরামর্শ দিন।
(দ্রষ্টব্য: date
ম্যাকোস-এ ন্যানোসেকেন্ডগুলি সরবরাহ করে না, তাই এটি অবশ্যই লিনাক্সে করা উচিত))
আমি সামগ্রীগুলি সহ গিটহাবে অ্যাপেনডেস্টেস্ট.শ তৈরি করেছি :
#!/bin/bash -e
output(){
ptime=$ctime;
ctime=$(date +%s.%N);
delta=$(bc <<<"$ctime - $ptime");
printf "%2s. %16s chars time: %s delta: %s\n" $n "$(bc <<<"10*(2^$n)")" $ctime $delta;
}
method1(){
echo 'Method: a="$a$a"'
for n in {1..32}; do a="$a$a"; output; done
}
method2(){
echo 'Method: a+="$a"'
for n in {1..32}; do a+="$a"; output; done
}
ctime=0; a="0123456789"; time method$1
পরীক্ষা 1:
$ ./append_test.sh 1
Method: a="$a$a"
1. 20 chars time: 1513640431.861671143 delta: 1513640431.861671143
2. 40 chars time: 1513640431.865036344 delta: .003365201
3. 80 chars time: 1513640431.868200952 delta: .003164608
4. 160 chars time: 1513640431.871273553 delta: .003072601
5. 320 chars time: 1513640431.874358253 delta: .003084700
6. 640 chars time: 1513640431.877454625 delta: .003096372
7. 1280 chars time: 1513640431.880551786 delta: .003097161
8. 2560 chars time: 1513640431.883652169 delta: .003100383
9. 5120 chars time: 1513640431.886777451 delta: .003125282
10. 10240 chars time: 1513640431.890066444 delta: .003288993
11. 20480 chars time: 1513640431.893488326 delta: .003421882
12. 40960 chars time: 1513640431.897273327 delta: .003785001
13. 81920 chars time: 1513640431.901740563 delta: .004467236
14. 163840 chars time: 1513640431.907592388 delta: .005851825
15. 327680 chars time: 1513640431.916233664 delta: .008641276
16. 655360 chars time: 1513640431.930577599 delta: .014343935
17. 1310720 chars time: 1513640431.954343112 delta: .023765513
18. 2621440 chars time: 1513640431.999438581 delta: .045095469
19. 5242880 chars time: 1513640432.086792464 delta: .087353883
20. 10485760 chars time: 1513640432.278492932 delta: .191700468
21. 20971520 chars time: 1513640432.672274631 delta: .393781699
22. 41943040 chars time: 1513640433.456406517 delta: .784131886
23. 83886080 chars time: 1513640435.012385162 delta: 1.555978645
24. 167772160 chars time: 1513640438.103865613 delta: 3.091480451
25. 335544320 chars time: 1513640444.267009677 delta: 6.163144064
./append_test.sh: fork: Cannot allocate memory
পরীক্ষা 2:
$ ./append_test.sh 2
Method: a+="$a"
1. 20 chars time: 1513640473.460480052 delta: 1513640473.460480052
2. 40 chars time: 1513640473.463738638 delta: .003258586
3. 80 chars time: 1513640473.466868613 delta: .003129975
4. 160 chars time: 1513640473.469948300 delta: .003079687
5. 320 chars time: 1513640473.473001255 delta: .003052955
6. 640 chars time: 1513640473.476086165 delta: .003084910
7. 1280 chars time: 1513640473.479196664 delta: .003110499
8. 2560 chars time: 1513640473.482355769 delta: .003159105
9. 5120 chars time: 1513640473.485495401 delta: .003139632
10. 10240 chars time: 1513640473.488655040 delta: .003159639
11. 20480 chars time: 1513640473.491946159 delta: .003291119
12. 40960 chars time: 1513640473.495354094 delta: .003407935
13. 81920 chars time: 1513640473.499138230 delta: .003784136
14. 163840 chars time: 1513640473.503646917 delta: .004508687
15. 327680 chars time: 1513640473.509647651 delta: .006000734
16. 655360 chars time: 1513640473.518517787 delta: .008870136
17. 1310720 chars time: 1513640473.533228130 delta: .014710343
18. 2621440 chars time: 1513640473.560111613 delta: .026883483
19. 5242880 chars time: 1513640473.606959569 delta: .046847956
20. 10485760 chars time: 1513640473.699051712 delta: .092092143
21. 20971520 chars time: 1513640473.898097661 delta: .199045949
22. 41943040 chars time: 1513640474.299620758 delta: .401523097
23. 83886080 chars time: 1513640475.092311556 delta: .792690798
24. 167772160 chars time: 1513640476.660698221 delta: 1.568386665
25. 335544320 chars time: 1513640479.776806227 delta: 3.116108006
./append_test.sh: fork: Cannot allocate memory
ত্রুটিগুলি নির্দেশ করে যে আমার বাশটি ক্র্যাশ হওয়ার আগে 335.54432 এমবি পর্যন্ত উঠেছিল । আপনি কোডটি দ্বিগুণ করার থেকে আরও বেশি দানাদার গ্রাফ এবং ব্যর্থতা পয়েন্ট পেতে ধ্রুবক যুক্ত করতে কোড পরিবর্তন করতে পারেন। তবে আমি মনে করি এটি যত্নশীল কিনা তা স্থির করার জন্য আপনাকে যথেষ্ট তথ্য দেওয়া উচিত। ব্যক্তিগতভাবে, আমি 100 এমবি নীচে না। আপনার মাইলেজ পরিবর্তিত হতে পারে.
join <(LANG=C bash -c 'a="a" c=1 last=${EPOCHREALTIME//.};while :;do a+=$a;now=${EPOCHREALTIME//.};echo $((c++)) ${#a} $((now-last));last=$now;done') <(LANG=C bash -c 'a="a" c=1 last=${EPOCHREALTIME//.};while :;do a=$a$a;now=${EPOCHREALTIME//.};echo $((c++)) ${#a} $((now-last));last=$now;done')|sed -ue '1icnt strlen a+=$a a=$a$a' -e 's/^\([0-9]\+\) \([0-9]\+\) \([0-9]\+\) \2/\1 \2 \3/' | xargs printf "%4s %11s %9s %9s\n"
(উত্পাদনশীল নয় এমন হোস্টের জন্য এটি চেষ্টা করুন !!;)
আমি একটি তালিকা থেকে একটি স্ট্রিং তৈরি করতে চেয়েছিলাম। এর জন্য কোনও উত্তর খুঁজে পাইনি তাই আমি এটি এখানে পোস্ট করছি। আমি যা করেছি তা এখানে:
list=(1 2 3 4 5)
string=''
for elm in "${list[@]}"; do
string="${string} ${elm}"
done
echo ${string}
এবং তারপর আমি নিম্নলিখিত আউটপুট পেতে:
1 2 3 4 5
মনে রাখবেন যে এটি কাজ করবে না
foo=HELLO
bar=WORLD
foobar=PREFIX_$foo_$bar
যেহেতু মনে হয় $ foo বাদ পড়ে এবং আপনাকে ছেড়ে দেয়:
PREFIX_WORLD
তবে এটি কাজ করবে:
foobar=PREFIX_"$foo"_"$bar"
এবং আপনাকে সঠিক আউটপুট দিয়ে চলে যাবে:
PREFIX_HELLO_WORLD
সুবিধাজনক হলে আমি এটি এইভাবে করি: একটি ইনলাইন কমান্ড ব্যবহার করুন!
echo "The current time is `date`"
echo "Current User: `echo $USER`"
date "+The current time is %a %b %d %Y +%T"
echo ...$(date)
printf "The current time is %(%a %b %d %Y +%T)T\n" -1
এডাব্লুকে-র মাধ্যমে এখানে একটি :
$ foo="Hello"
$ foo=$(awk -v var=$foo 'BEGIN{print var" World"}')
$ echo $foo
Hello World
আমার মতে, দুটি স্ট্রিং সংমিশ্রনের সহজতম উপায় হ'ল একটি ফাংশন লিখুন যা এটি আপনার জন্য করে, তারপরে সেই ফাংশনটি ব্যবহার করুন।
function concat ()
{
prefix=$1
suffix=$2
echo "${prefix}${suffix}"
}
foo="Super"
bar="man"
concat $foo $bar # Superman
alien=$(concat $foo $bar)
echo $alien # Superman
আমি এক ধরনের দ্রুত কাজ করা পছন্দ করি।
#! /bin/sh -f
function combo() {
echo $@
}
echo $(combo 'foo''bar')
তবুও বিড়ালের চামড়ার অন্য উপায় way এবারে ফাংশন সহ: ডি
আমি এখনও পিএইচপি সম্পর্কে জানি না, তবে এটি লিনাক্স ব্যাশে কাজ করে। আপনি যদি এটি কোনও পরিবর্তনশীলকে প্রভাবিত করতে না চান তবে আপনি এটি চেষ্টা করতে পারেন:
read pp; *# Assumes I will affect Hello to pp*
pp=$( printf $pp ;printf ' World'; printf '!');
echo $pp;
>Hello World!
আপনি 'হ্যালো' বা '!' এর পরিবর্তে অন্য পরিবর্তনশীল রাখতে পারেন। আপনি আরও স্ট্রিং সংহত করতে পারেন।
foo="Hello"
foo=$foo" World"
echo $foo
এটি বরং "#! / বিন / শ"