බාෂ් මුද්‍රණයේ ඇති නව රේඛාව වචනාර්ථයෙන් මුද්‍රණය කරයි. N.


2389

Bash හි, මෙය උත්සාහ කරන්න:

echo -e "hello\nworld"

නමුත් එය නව රේඛාවක් මුද්‍රණය නොකරයි \n. නව රේඛාව මුද්‍රණය කරන්නේ කෙසේද?

මම උබුන්ටු 11.04 භාවිතා කරමි.


266
"එය මට වැඩ කරයි" යැයි පවසන අයට, දෝංකාරයේ හැසිරීම අනුවාද අතර තරමක් වෙනස් වේ. සමහරු ඔවුන්ගේ නිමැවුමේ කොටසක් ලෙස "-e" මුද්‍රණය කරනු ඇත. අත්‍යවශ්‍ය නොවන ඕනෑම දෙයක් සඳහා ඔබට පුරෝකථනය කළ හැකි හැසිරීමක් අවශ්‍ය නම්, ඒ වෙනුවට printf භාවිතා කරන්න (@ sth ගේ පිළිතුරෙහි මෙන්).
ගෝර්ඩන් ඩේවිසන්

6
මෙම පිළිතුරෙහි වැඩ කිරීමේ යෝජනා කිසිවක් මට ලබා ගැනීමට නොහැකි විය , මන්දයත්, එය පෙනෙන පරිදි, මම එය වටිනාකමක් ලබා දෙන ශ්‍රිතයක් තුළ භාවිතා කිරීමට උත්සාහ කළ අතර, ශ්‍රිතයේ ඇති සියලුම ප්‍රතිරාවය (සහ printf) පණිවිඩ එකතු කරනු ලැබේ. නව රේඛා තනි තනිව ඉවත් කිරීමෙන් පසු ප්‍රතිලාභ අගය . මෙන්න මේ පිළිබඳ ප්‍රශ්නයක්, අතිශය සවිස්තරාත්මක පිළිතුරක් සමඟ: stackoverflow.com/questions/27872069/… මෙය පැය තුනක අභිරහස් සංචාරයක් වැනිය.
aliteralmind

8
ද සැලකිය යුතු: Unix සහ Linux Stack විනිමය, තුළ පිළිගත් පිළිතුර කිරීමට සුප්රසිද්ධ echo විධානය භාවිතා කරන විට නව රේඛා එකතු කරන්නේ කෙසේද?
ග්රැහැම් පෙරින්

@ ග්‍රැහැම්පෙරින්, ඉතා හොඳ හා සවිස්තරාත්මක පිළිතුරකට සබැඳියට ස්තූතියි! මම හිතන්නේ එය පහත පිළිතුරු වලට වඩා හොඳයි.
කොන්ස්ටන්ටින්

2
echo -ne "hello \ nworld" (ගැලවීම අර්ථ නිරූපණය කිරීම සඳහා ඔබට ධජය අවශ්‍ය විය) - නමුත් අනෙක් අය පවසන පරිදි, විවිධ echo විධානයන්ට වෙනස් ප්‍රති results ල ලැබිය හැකිය!
කොන්චෝග්

Answers:


2905

ඔබට printfඒ වෙනුවට භාවිතා කළ හැකිය :

printf "hello\nworld\n"

printfවඩා ස්ථාවර හැසිරීමක් echoඇත. echoවිවිධ අනුවාද අතර හැසිරීම බොහෝ සෙයින් වෙනස් වේ.


49
හෝ පවා printf %"s\n" hello world- ඕනෑවට වඩා තර්ක ලබා දෙන්නේ නම් printf ආකෘතිය නැවත භාවිතා කරයි
ග්ලෙන් ජැක්මන්

28
OP විමසුවේ echo ගැන මිස printf ගැන නොවේ; සහ @e විකල්පය භාවිතා කරන පහත choroba ගේ පිළිතුර, බිල්පත පරිපූර්ණව පුරවයි.
ජේසි

58
ESJESii: ඔබ විකල්පයට echoසහය දක්වන්නේ නම් එය ගැලපේ -e.
sth

11
සමහර අනුවාදයන් සමඟ echo, -eප්‍රතිදානයේම මුද්‍රණය කර ඇති බැවින් මෙහි පිළිතුර echoනොගැලපෙන බැවින් මෙම පිළිතුර පරිපූර්ණ ලෙස වලංගු යැයි මම සිතමි (අප නිශ්චිත අනුවාදයක් ගැන කතා නොකරන්නේ නම්).
තේජාස් මනෝහර්

14
Printf තිබේ නම් මෙය හොඳ සහ හොඳයි, නමුත් දෝංකාරය මෙන් නොව සමහර විට printf ඩිස්ට්‍රෝ හි නොමැත.
bigtunacan

1723

ඔබට විශ්වාසද? මා වෙනුවෙන් ක්‍රියා කරයි, ක්‍රම හතරම:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world

371
-e ධජය මා වෙනුවෙන් එය කළ අතර එය "බැක්ස්ලෑෂ්
ගැලවීම

21
මම හිතන්නේ -eසියලුම *
නික්ස්

12
@kenorb: එය පවතින්නේ බාෂ් වල ය. එය බිල්ඩින් ය.
choroba

තුන්වන එක වැඩ කරන්නේ ඇයි? $ නොමැතිව එය "හෙලෝ එන් වර්ල්ඩ්"
යවයි

22
වෙනත් බොහෝ අය සඳහන් කළ පරිදි -e සියළුම බෙදාහැරීම් සහ අනුවාද සඳහා ක්‍රියා නොකරයි. සමහර අවස්ථාවල එය නොසලකා හරින අතර අනෙක් ඒවා ඇත්ත වශයෙන්ම මුද්‍රණය වේ. මෙය OP සඳහා සවි කර ඇති බව මම විශ්වාස නොකරමි, එබැවින් පිළිතුර පිළිගත යුතු නැත
csga5000

582
echo $'hello\nworld'

මුද්රණ

hello
world

$''නූල් ANSI C උපුටා දැක්වීම භාවිතා කරයි :

පෝරමයේ වචන විශේෂයෙන් සලකනු ලැබේ. යන වචනය පුළුල් string පදයේ අග-පලා චරිත ANSI C ප්රමිතිය නිශ්චිතව දක්වා ඇති ආකාරයට වෙනුවට සමග.$'string'


15
VEvgeniSergeev ඔබ අදහස් කළේ කුමක්දැයි විශ්වාස නැත, නමුත් එය මුලින් මට වැඩ කළේ නැත. ඒ මම ද්විත්ව උපුටා දැක්වීම් භාවිතා කළ නිසාත් මෙය ක්‍රියාත්මක වන්නේ තනි උපුටා දැක්වීම්වලින් පමණක් බවත්! මැක්හි ටර්මිනලයේ උත්සාහ කළා.
trss

11
නූල් වල විචල්යයන් සමඟ ගැටළු පුළුල් නොවේ.
willemdh

ඔබට තවමත් ද්විත්ව උපුටා දැක්වීමේ නූල් එකිනෙක සම්බන්ධ කළ හැකිය. `foo =" තීරුව "; echo $ '' o foo'efoot'`
Kamafeather

141

ඔබට සෑම විටම කළ හැකිය echo "".

උදා

echo "Hello"
echo ""
echo "World"

6
echo ""මා වෙනුවෙන් වැඩ කරන අතර මෙය නව පේළියක් මුද්‍රණය කිරීම සඳහා ඇති සරලම ආකාරය යැයි මම සිතමි. චියර්ස්.
මාරියෝ ආවාඩ්

2
මම හිතන්නේ එය වඩා පැහැදිලිව පෙනෙන අතර (ඒ නිසා වඩා ව්‍යාකූල විය හැකිය) echo -en "\n".
ඩීබෙඩ්‍රෙන්කෝ

72
echoහිස් රේඛාවක් ලබා ගැනීමට ප්‍රමාණවත්
ROMANIA_engineer

5
K ඕක්නෙලොපර් මට හොඳින් වැඩ කරයි.
මැතිව්

73

උත්සාහ කරන්න

echo -e "hello\nworld"
hello
world

මා වෙනුවෙන් වැඩ කළා nano සංස්කාරක ලෙස .

මෑන් පිටුවෙන්:

-e බැක්ස්ලෑෂ් ගැලවී යාමේ අර්ථ නිරූපණය සක්‍රීය කරන්න


41

සහායකයකුගේ පිටපතක් නව රේඛා මුද්‍රණය නොකරන්නේ මන්දැයි වටහා ගැනීමට යමෙකු බිත්තියට හිස ගසාගෙන යන බවක් පෙනෙන්නට තිබේ නම්, මේ ගැන සොයා බලන්න ->

#!/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;

ක්‍රමවේදය ප්‍රතිරාවය කිරීමට පෙර ඔබ විචල්‍යය උපුටා දැක්වීම් සමඟ ඔතා ඇති බවට වග බලා ගන්න.
ingyhere


23

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

එය යම් ව්‍යාකූලත්වයක් ඇති කළ හැකිය.


18

සරලව ටයිප් කරන්න

echo

නව රේඛාවක් ලබා ගැනීමට


3
බොහෝ සෙයින් අවතක්සේරු කළ පිළිතුර, මෙම ප්‍රශ්නයට 2011 සිට පිළිතුරු 20+ ක් එකතු වී ඇති බවත් ඒවායින් එකකවත් මෙම සරල විසඳුම අඩංගු නොවන බවත් විශ්වාස කළ නොහැක.
ප්‍රොමේතියස්

අන්වර්ථය c = 'දෝංකාරය; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; echo; ' මගේ තිරය ඉවත් කළ හැකි එකම ක්‍රමය මෙයයි, ස්තූතියි!
අහි ටූනා

Hi අහි ටූනා: කරුණාකර ඒ වෙනුවට ඔබේ කොන්සෝල යතුරුපුවරු කෙටිමං භාවිතා කරන්න :)
ආර් සන්

@RSun සහ මම එය Chromebook හි ඩෙබියන් පර්යන්ත කවුළුවක කරන්නේ කෙසේද?
අහි ටූනා

Ike මයික් සීඩ්ස් යනු වීරයෙකි.
මාර්ක් වඩු කාර්මික ජූනි

16
str='hello\nworld'
$ echo | sed "i$str"
hello
world

මෙය සැබවින්ම විශිෂ්ට පිළිතුරකි. මහා!
LavaScornedOven

1
දෙවන වැඩසටහනක් කැඳවීමට කරදර වන්නේ ඇයි? අපි තථ්‍ය කාලීන යෙදුමක් බාෂ් වලින් ලිවීමට උත්සාහ කරන බව නොවේ;) නමුත් එය අවශ්‍ය නොවේ.
ෆීලික්ස් ඩී

මෙය සැබවින්ම විශිෂ්ට පිළිතුරකි, එය කුමක් වුවත් සෑම තැනකම වැඩ කළ යුතුය. ඔබ මගේ දින මිතුරා බේරා ගත්තා @alinsoar
Kashyap

8

CentOS හි එය මට වැඩ කරයි:

echo -e ""hello\nworld""

6

ඔබට ද කළ හැකිය:

echo "hello
world"

මෙය ස්ක්‍රිප්ටයක් තුළ සහ විධාන රේඛාවෙන් ක්‍රියාත්මක වේ.
විධාන රේඛාවේදී Shift+ ඔබන්නEnter නූල ඇතුළත රේඛාව කැඩීමට .

මෙය මගේ මැකෝස් සහ මගේ උබුන්ටු 18.04 මත වැඩ කරයි


ඔබ Ènter` එබූ විට විධානය ක්‍රියාත්මක කිරීම සඳහා කවචය නොමැතිව එම රේඛා බිඳීම ටයිප් කරන්නේ කෙසේද?
සෙනෝස්

En සෙනෝස් මෙය ස්ක්‍රිප්ට් එකක හොඳින් ක්‍රියාත්මක වේ. කොන්සෝලය තුළ, නිම නොකළ විධානය ක්‍රියාත්මක කිරීම සඳහා කවචය තිබීම වළක්වා ගැනීම සඳහා නව පේළියක් එක් කිරීමට Shift + Enter ක්ලික් කරන්න.
වින්සි

5

මෙම විසඳුම් කිසිවක් සමඟ ක්‍රියා නොකරන, ඔවුන්ගේ ක්‍රියාකාරීත්වයෙන් ප්‍රතිලාභ අගයක් ලබා ගත යුතු අය සඳහා මෙහි තවත් එක් ප්‍රවේශයක්:

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)

ඒ හා සමාන ගැටලුවක් ඇති කෙනෙකුට එය උපකාරී වේ යැයි සිතමු.


4

මගේ පිටපත:

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:

5
සටහනක් පමණක්, ඔබේ විචල්‍ය නම් වටා $ {use භාවිතා කිරීමට ඔබට අවශ්‍ය වනු ඇත, එසේ නොකිරීම ෂෙල් එකක් $ අනතුරු ඇඟවීම් ෆවුන්ඩ් නම් විචල්‍යයක් සොයාගෙන මුද්‍රණය කරන විට මිස වෙනම ප්‍රතිදානයන් දෙක නොවේ.
dragon788

@ dragon788 සමහර විට මට යමක් මග හැරී ඇත, නමුත් විචල්‍යය ඇත්ත වශයෙන්ම $ අනතුරු ඇඟවීම් ෆවුන්ඩ් ලෙස හැඳින්වේ?
psynnott

2
මට ඒ ගැන වචනයක් මග හැරුණි. ඔබට $ අනතුරු ඇඟවීම් නම් විචල්‍යයක් තිබේ නම්, සමහර අවස්ථාවල $ {අනතුරු ඇඟවීම් ෆවුන්ඩ් using භාවිතා නොකර, ඔබ අදහස් කළ විචල්‍යය වෙනුවට $ අනතුරු ඇඟවීම් + “සොයාගත්” අන්තර්ගතය සමඟ අවසන් විය හැකිය.
dragon788

3

ඔබට වරහන් සමඟ දෝංකාරය භාවිතා කළ හැකිය,

$ (echo hello; echo world)
hello
world

අනපේක්ෂිත ටෝකනය අසල ඇති සින්ටැක්ස් දෝෂය `('.sh ගොනුවට ඇමතූ විට
cosbor11

1
උත්සාහ කරන්නecho hello; echo world
අවිනාශ් රාජ්

1
හෝ "echo hello && echo world" හෝ හුදෙක්: "echo hello echo world
csga5000

3

මෙය වඩා හොඳ ලෙස කළ හැකිය

x="\n"
echo -ne $x

-e විකල්පය ගැලවීමේ අනුක්‍රමය සඳහා බැක්ස්ලේස් අර්ථ නිරූපණය කරයි
-n විකල්පය මඟින් ප්‍රතිදානයේ පසුපස ඇති නව ඉවත් කරනු ඇත

PS: විධානය echo සෑම විටම ප්‍රතිදානයේ නව රේඛාවක් ඇතුළත් කිරීමේ බලපෑමක් ඇති කරයි, එම නිසා එය ක්‍රියා විරහිත කිරීමට -n අවශ්‍ය වේ (සහ එය අඩු ව්‍යාකූලත්වයක් ඇති කරයි)


echo -ne "hello \ nworld" යන ප්‍රශ්නයට නිශ්චිත පිළිතුර සඳහා :)
ධවානිත්

3

ගැලවීමේ අනුපිළිවෙල අර්ථ නිරූපණය කරන නව පරාමිති ප්‍රසාරණයක් එක් කර ඇත bash 4.4:

${parameter@operator} - E operator

ප්‍රසාරණය යනු $'…'උපුටා දැක්වීමේ යාන්ත්‍රණය මෙන් පුළුල් කරන ලද බැක්ස්ලෑෂ් ගැලවීමේ අනුක්‍රමයන් සහිත පරාමිතියේ අගයයි .

$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world

3

ඔබ ස්ක්‍රිප්ට් ලියන්නේ නම් සහ වෙනත් පණිවිඩවල කොටසක් ලෙස නව රේඛා කිහිප වතාවක් දෝංකාර දෙයි නම්, හොඳ හරස් වේදිකා විසඳුමක් වන්නේ වචනයේ පරිසමාප්ත අර්ථයෙන්ම විචල්‍යය තුළ තැබීමයි:

newline='
'

echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined

0

සමහර විට ඔබට අවකාශයකින් වෙන් කරන ලද නූල් කිහිපයක් පසු කළ හැකි අතර එය අර්ථ නිරූපණය කෙරේ \n.

උදාහරණයක් ලෙස බහු රේඛා දැනුම්දීම් සඳහා ෂෙල් ස්ක්‍රිප්ට් භාවිතා කරන විට:

#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`

මෙය වැරදිය. එය කිසි විටෙකත් අර්ථකථනය නොකෙරේ \n. එය වැඩසටහනට වෙනම තර්කයක් ලෙස අර්ථකථනය කර ඇති අතර, වැඩසටහන විසින්ම එම තර්කය නව රේඛාවකින් පෙන්වනු ඇත, නමුත් එයින් අදහස් වන්නේ එය \nඕනෑම අවස්ථාවකට පරිවර්තනය කර ඇති අතර එය සම්පූර්ණයෙන්ම වැඩසටහන මත රඳා පවතින බවයි.
ලකුණු_අන්ඩර්

0

Bash පැතිකඩෙහි (MacOx, iTerm) අන්වර්ථයක් ලෙස භාවිතා කරන අතරතුර මට ද්විත්ව උපුටා දැක්වීම් සමඟ පෙළ වට කිරීමට සිදුවිය.

alias helloworld="echo -e \"hello \n world\""

0

මේක මාව එතනට ගත්තා ....

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]

-1

මම භාවිතා කරන්නේ දෝංකාරය තර්ක නොවේ

echo "Hello"
echo
echo "World"

-2

අතිරේක විසඳුම:

අවස්ථා වලදී, ඔබට දිගු අන්තර්ගතයන්හි බහු කේත ප්‍රතිරාවය කිරීමට සිදුවේ (කේත / වින්‍යාස කිරීම් වැනි)

උදාහරණයක් වශයෙන් :

  • කේත / වින්‍යාසයන් ජනනය කිරීමට බාෂ් ස්ක්‍රිප්ට් එකක්

echo -e, printfයම් සීමාවක් තිබිය හැක

ඔබට රේඛා බිඳීමක් ලෙස (වැනි ~) ස්ථාන දරන්නා ලෙස විශේෂ වර්‍ග භාවිතා කළ හැකි අතර ගොනුව නිර්මාණය කිරීමෙන් පසුව එය ප්‍රතිස්ථාපනය කරන්නtr

echo ${content} | tr '~' '\n' > $targetFile

එයට වෙනත් වැඩසටහනක් ( tr) යෙදිය යුතු අතර එය හොඳ IMO විය යුතුය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.