Bash හි, මෙය උත්සාහ කරන්න:
echo -e "hello\nworld"
නමුත් එය නව රේඛාවක් මුද්රණය නොකරයි \n
. නව රේඛාව මුද්රණය කරන්නේ කෙසේද?
මම උබුන්ටු 11.04 භාවිතා කරමි.
Bash හි, මෙය උත්සාහ කරන්න:
echo -e "hello\nworld"
නමුත් එය නව රේඛාවක් මුද්රණය නොකරයි \n
. නව රේඛාව මුද්රණය කරන්නේ කෙසේද?
මම උබුන්ටු 11.04 භාවිතා කරමි.
Answers:
ඔබට printf
ඒ වෙනුවට භාවිතා කළ හැකිය :
printf "hello\nworld\n"
printf
වඩා ස්ථාවර හැසිරීමක් echo
ඇත. echo
විවිධ අනුවාද අතර හැසිරීම බොහෝ සෙයින් වෙනස් වේ.
printf %"s\n" hello world
- ඕනෑවට වඩා තර්ක ලබා දෙන්නේ නම් printf ආකෘතිය නැවත භාවිතා කරයි
echo
සහය දක්වන්නේ නම් එය ගැලපේ -e
.
echo
, -e
ප්රතිදානයේම මුද්රණය කර ඇති බැවින් මෙහි පිළිතුර echo
නොගැලපෙන බැවින් මෙම පිළිතුර පරිපූර්ණ ලෙස වලංගු යැයි මම සිතමි (අප නිශ්චිත අනුවාදයක් ගැන කතා නොකරන්නේ නම්).
ඔබට විශ්වාසද? මා වෙනුවෙන් ක්රියා කරයි, ක්රම හතරම:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world
-e
සියලුම *
echo $'hello\nworld'
මුද්රණ
hello
world
$''
නූල් ANSI C උපුටා දැක්වීම භාවිතා කරයි :
පෝරමයේ වචන විශේෂයෙන් සලකනු ලැබේ. යන වචනය පුළුල් string පදයේ අග-පලා චරිත ANSI C ප්රමිතිය නිශ්චිතව දක්වා ඇති ආකාරයට වෙනුවට සමග.
$'string'
ඔබට සෑම විටම කළ හැකිය echo ""
.
උදා
echo "Hello"
echo ""
echo "World"
echo ""
මා වෙනුවෙන් වැඩ කරන අතර මෙය නව පේළියක් මුද්රණය කිරීම සඳහා ඇති සරලම ආකාරය යැයි මම සිතමි. චියර්ස්.
echo -en "\n"
.
echo
හිස් රේඛාවක් ලබා ගැනීමට ප්රමාණවත්
උත්සාහ කරන්න
echo -e "hello\nworld"
hello
world
මා වෙනුවෙන් වැඩ කළා nano
සංස්කාරක ලෙස .
මෑන් පිටුවෙන්:
-e
බැක්ස්ලෑෂ් ගැලවී යාමේ අර්ථ නිරූපණය සක්රීය කරන්න
සහායකයකුගේ පිටපතක් නව රේඛා මුද්රණය නොකරන්නේ මන්දැයි වටහා ගැනීමට යමෙකු බිත්තියට හිස ගසාගෙන යන බවක් පෙනෙන්නට තිබේ නම්, මේ ගැන සොයා බලන්න ->
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
echo $(GET_RECORDS);
ඉහත සඳහන් කළ පරිදි, ක්රමයේ සත්ය ධාවනය දෝංකාරයකින් ඔතා තිබිය හැකි අතර එමඟින් ක්රමයේම ඇති ඕනෑම දෝංකාරයක් අභිබවා යයි. නිසැකවම මම මෙය සාරවත් කිරීම සඳහා වතුර දැමුවෙමි, එය හඳුනා ගැනීම එතරම් පහසු නොවීය!
කාර්යයන් ඉටු කිරීම සඳහා වඩා හොඳ ක්රමයක් එසේ වනු ඇති බව ඔබට පසුව ඔබේ සහෝදරවරුන්ට දැනුම් දිය හැකිය:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
මෙය මට රාස්බියන් භාෂාවෙන් වැඩ කරයි,
echo -e "hello\\nworld"
POSIX 7 දෝංකාරය මත
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
නිර්වචනය කර නොමැති අතර බැක්ස්ලෑෂ් ක්රියාත්මක කිරීම අර්ථ දක්වා ඇත:
පළමු ඔපෙරන්ඩ් එක -n නම්, හෝ කිසියම් ඔපෙරන්ඩ් එකක <backslash> අක්ෂරයක් තිබේ නම්, ප්රති results ල ක්රියාත්මක කිරීම-අර්ථ දක්වා ඇත.
ඔබට විකල්ප XSI දිගුවක් නොමැති නම්.
එබැවින් ඒ printf
වෙනුවට භාවිතා කළ යුතු යැයි මම නිර්දේශ කරමි .
එක්ස්බීඩී ගොනු ආකෘති අංකනයෙහි විස්තර කර ඇති ආකෘති නූල ලෙස ෆෝමැට් ඔපෙරන්ඩ් භාවිතා වේ [...]
මෙම ගොනුව ආකෘතිය අංකනය :
line n <newline> මුද්රණ ස්ථානය ඊළඟ පේළියේ ආරම්භයට ගෙන යන්න.
උබුන්ටු 15.10 සහ බොහෝ ඩිස්ට්රෝස් echo
දෙකම පහත පරිදි ක්රියාත්මක කරන බව මතක තබා ගන්න :
help echo
which echo
එය යම් ව්යාකූලත්වයක් ඇති කළ හැකිය.
සරලව ටයිප් කරන්න
echo
නව රේඛාවක් ලබා ගැනීමට
str='hello\nworld'
$ echo | sed "i$str"
hello
world
CentOS හි එය මට වැඩ කරයි:
echo -e ""hello\nworld""
ඔබට ද කළ හැකිය:
echo "hello
world"
මෙය ස්ක්රිප්ටයක් තුළ සහ විධාන රේඛාවෙන් ක්රියාත්මක වේ.
විධාන රේඛාවේදී Shift+ ඔබන්නEnter නූල ඇතුළත රේඛාව කැඩීමට .
මෙය මගේ මැකෝස් සහ මගේ උබුන්ටු 18.04 මත වැඩ කරයි
මෙම විසඳුම් කිසිවක් සමඟ ක්රියා නොකරන, ඔවුන්ගේ ක්රියාකාරීත්වයෙන් ප්රතිලාභ අගයක් ලබා ගත යුතු අය සඳහා මෙහි තවත් එක් ප්රවේශයක්:
function foo()
{
local v="Dimi";
local s="";
.....
s+="Some message here $v $1\n"
.....
echo $s
}
r=$(foo "my message");
echo -e $r;
මෙම උපක්රමය පමණක් මා වැඩ කරමින් සිටි ලිනක්ස් එකක වැඩ කළේ:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
ඒ හා සමාන ගැටලුවක් ඇති කෙනෙකුට එය උපකාරී වේ යැයි සිතමු.
මගේ පිටපත:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
ප්රතිදානය:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
මගේ බාෂ් ස්ක්රිප්ටයේ මම උත්සාහ කරන තුරු මම ඔබ මෙන් පිස්සු වැටී සිටියෙමි:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
ඔබට එම පැනීම ඇතුළු කිරීමට අවශ්ය තැනට ඇතුළු වන්න. ප්රතිදානය දැන්:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
ඔබට වරහන් සමඟ දෝංකාරය භාවිතා කළ හැකිය,
$ (echo hello; echo world)
hello
world
echo hello; echo world
මෙය වඩා හොඳ ලෙස කළ හැකිය
x="\n"
echo -ne $x
-e විකල්පය ගැලවීමේ අනුක්රමය සඳහා බැක්ස්ලේස් අර්ථ නිරූපණය කරයි
-n විකල්පය මඟින් ප්රතිදානයේ පසුපස ඇති නව ඉවත් කරනු ඇත
PS: විධානය echo සෑම විටම ප්රතිදානයේ නව රේඛාවක් ඇතුළත් කිරීමේ බලපෑමක් ඇති කරයි, එම නිසා එය ක්රියා විරහිත කිරීමට -n අවශ්ය වේ (සහ එය අඩු ව්යාකූලත්වයක් ඇති කරයි)
ගැලවීමේ අනුපිළිවෙල අර්ථ නිරූපණය කරන නව පරාමිති ප්රසාරණයක් එක් කර ඇත bash 4.4
:
${parameter@operator} - E operator
ප්රසාරණය යනු
$'…'
උපුටා දැක්වීමේ යාන්ත්රණය මෙන් පුළුල් කරන ලද බැක්ස්ලෑෂ් ගැලවීමේ අනුක්රමයන් සහිත පරාමිතියේ අගයයි .
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
ඔබ ස්ක්රිප්ට් ලියන්නේ නම් සහ වෙනත් පණිවිඩවල කොටසක් ලෙස නව රේඛා කිහිප වතාවක් දෝංකාර දෙයි නම්, හොඳ හරස් වේදිකා විසඳුමක් වන්නේ වචනයේ පරිසමාප්ත අර්ථයෙන්ම විචල්යය තුළ තැබීමයි:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
සමහර විට ඔබට අවකාශයකින් වෙන් කරන ලද නූල් කිහිපයක් පසු කළ හැකි අතර එය අර්ථ නිරූපණය කෙරේ \n
.
උදාහරණයක් ලෙස බහු රේඛා දැනුම්දීම් සඳහා ෂෙල් ස්ක්රිප්ට් භාවිතා කරන විට:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
\n
. එය වැඩසටහනට වෙනම තර්කයක් ලෙස අර්ථකථනය කර ඇති අතර, වැඩසටහන විසින්ම එම තර්කය නව රේඛාවකින් පෙන්වනු ඇත, නමුත් එයින් අදහස් වන්නේ එය \n
ඕනෑම අවස්ථාවකට පරිවර්තනය කර ඇති අතර එය සම්පූර්ණයෙන්ම වැඩසටහන මත රඳා පවතින බවයි.
මේක මාව එතනට ගත්තා ....
outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID]
printf $outstuff
අස්වැන්න:
RESOURCE_GROUP=[akswork-rg]
AKS_CLUSTER_NAME=[aksworkshop-804]
REGION_NAME=[eastus]
VERSION=[1.16.7]
SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]
අතිරේක විසඳුම:
අවස්ථා වලදී, ඔබට දිගු අන්තර්ගතයන්හි බහු කේත ප්රතිරාවය කිරීමට සිදුවේ (කේත / වින්යාස කිරීම් වැනි)
උදාහරණයක් වශයෙන් :
echo -e
,
printf
යම් සීමාවක් තිබිය හැක
ඔබට රේඛා බිඳීමක් ලෙස (වැනි ~
) ස්ථාන දරන්නා ලෙස විශේෂ වර්ග භාවිතා කළ හැකි අතර ගොනුව නිර්මාණය කිරීමෙන් පසුව එය ප්රතිස්ථාපනය කරන්නtr
echo ${content} | tr '~' '\n' > $targetFile
එයට වෙනත් වැඩසටහනක් ( tr
) යෙදිය යුතු අතර එය හොඳ IMO විය යුතුය.