විස්මිත සලකුණකින් මා බේරෙන්නේ කෙසේද?


196

මට ඒ වගේ දෙයක් කරන්න ඕන bzr commit -m "It works!". එසේ කිරීමෙන් මට පුදුම කිරීමේ සලකුණෙන් ගැලවිය හැකිය bzr commit -m "It works\!". කෙසේ වෙතත්, එවිට මගේ කැපවීමේ පණිවිඩයට බැක්ස්ලෑෂ් ඇතුළත් වේ. බැක්ස්ලෑෂ් නොසලකා හරිමින් මම පුදුම ලකුණෙන් බේරෙන්නේ කෙසේද?


1
වැඩත් කරනවා bzr commit -m "It works"!.
kba

1
ඔබ තැබූ විධානයට පෙර මා සඳහන් කළ පරිදි එය තනිවම ක්‍රියාත්මක වේ :)bzr commit -m "It works!"
h4unt3r

කැදැලි උපුටා දැක්වීම් සමඟ ඊටත් වඩා විචක්ෂණශීලී නඩුවක්: stackoverflow.com/questions/22125658/…
සිරෝ සැන්ටිලි 冠状 病毒 审查 六四 法轮功 法轮功

1
පිළිගත් පිළිතුර ඔබගේ බැඳීම් ගැටළු සඳහා හොඳ විසඳුමක් වුවද, එය සත්‍ය ප්‍රශ්නයට පිළිතුරක් නොවන බව මට හැඟේ: බෑෂ් ඉතිහාසය පුළුල් කිරීම . කරුණාකර ඩෙනිස්ගේ පිළිතුර පිළිගැනීම ගැන සලකා බලන්න?
අර්ජන්

for h4unt3r මට වැඩ කරන බවක් නොපෙනේද? echo "It works!" -bash: !": event not found
rogerdpack

Answers:


165

ඔබගේ කැපවීමේ පණිවිඩයේ විචල්‍යයන් පුළුල් කිරීම සඳහා ඔබ bash මත රඳා නොසිටින බැවින් ඔබට ඒ වෙනුවට තනි උපුටා දැක්වීම් භාවිතා කළ හැකිය. තනි උපුටා දැක්වීම්වල නූල් බාෂ් මගින් පුළුල් නොවේ.

bzr commit -m 'This does work!' 

25
ප්රශ්නය "මම පුදුම කිරීමේ සලකුණෙන් බේරෙන්නේ කෙසේද?" සහ "මම පුදුම කිරීමේ සලකුණ පුළුල් නොකරන්නේ කෙසේද?" මෙය වලංගු යැයි මම නොසිතමි. සමහර විට (එකම විධාන රේඛාවේ අපෝස්තලික හා විශ්මයජනක ලකුණු පසු කරන විට වැනි) මෙය ක්‍රියාත්මක නොවේ. බොහෝ දෙනෙකුට අවශ්‍ය දේ කිරීමට පහත පිළිතුර වඩා හොඳින් ක්‍රියා කරයි.
Jann

8
Ann ජෑන්: ඔබ මේ සම්බන්ධයෙන් 100% ක්ම නිවැරදියි, නමුත් මම සිතන්නේ ගැටලුව මෙහි ඇත්තේ සුපර් යූසර් පිළිබඳ බොහෝ ප්‍රශ්න ඇති ප්‍රශ්නයයි: අපි ප්‍රශ්නයට කාරණයට පිළිතුරු දෙනවාද, නැතහොත් ඔවුන්ගේ විශේෂිත ගැටලුව විසඳීමට අපි මිනිසුන්ට උදව් කරනවාද? මෙම ක්‍රම දෙකම ප්‍රයෝජනවත් විය හැකි යැයි මම සිතමි.
බෙන්ජමින් බැනියර්

ස්පර්ශ කරන්න! මෙය විශේෂිත කාරණයක් විය. මගේ ප්‍රශ්න වලට පිළිතුරක් බොහෝ අවස්ථාවන්හිදී භාවිතා කිරීමට හැකිවීම සඳහා මම නැඹුරු වෙමි. පීඑස්: මා මෙය සඳහන් කිරීමට හේතුව වූයේ පර්ල් වැඩසටහනකට අපෝස්තලාපයක් සහ විශ්මය දනවන ලකුණක් ලබා දීමට මට අවශ්‍ය වූ අතර මට පහත විසඳුම අවශ්‍ය විය. :)
Jan

මම බෙන්ජමින් සහ ජෑන් යන දෙදෙනාම සමඟ එකඟ වෙමි. ප්‍රශ්නයේ මාතෘකාව සෙවුම් යන්ත්‍ර මගින් සුචිගත කර ඇති අතර මා මෙහි පැමිණියේ එලෙසය. බොහෝ පරිශීලකයින් මෙහි පැමිණේ. සත්‍ය ප්‍රශ්නය එය පිටුපස ඇති ගැටලුව පිළිබිඹු කිරීම වැදගත් යැයි මම විශ්වාස කරන්නේ එබැවිනි. වෙනත් සංසදවලදී මිනිසුන්ට ඔවුන් සොයන දේ හරියටම විමසීමට (පාහේ බල කෙරෙයි) උපදෙස් දෙනු ලැබේ. දුර්වල ලෙස ප්‍රකාශ කරන ලද ප්‍රශ්නවලට පිළිතුරු සැපයීම අලසකමට සහාය වන අතර මෙහි මගේ අවතක්සේරු කිරීමට නිශ්චිත හේතුව එයයි. සම්මුතියක් / විසඳුමක් ලෙස මගේ යෝජනාව නම් මාතෘකාව අනුවර්තනය වීමට උදව් වන අතර එමඟින් එය සැබෑ ගැටළුව පිළිබිඹු කරයි.
ක්‍රිස්ටෝෆ්

මට පාරම්පරිකය තුළ විශ්මය ජනක ලකුණ භාවිතා කිරීමට අවශ්‍ය නම් කුමක් කළ යුතුද?
ඇන්ඩ්‍රි LED

155

ද්විත්ව උපුටා දැක්වීම් මෙන්ම විශ්මය දනවන දේ අවශ්‍ය නම් මෙන්න තවත් ක්‍රමයක්:

echo "It's broken"'!'

!රේඛාවේ අවසානයේ නොමැති වුවද මෙය ක්‍රියාත්මක වේ.

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

echo "hello there"'!'" and goodbye"

පාරිතෝෂිකය: Sh හෝ Bash හි ඇති ඕනෑම පෙළකින් ගැලවීමට සමාන ක්‍රමවේදයක් භාවිතා කළ හැකිය (sed ආධාරයෙන්): මෙම පිළිතුරේ පළමු විකල්පය බලන්න . තවද, ඔබ නම් bash-completionස්ථාපනය, ඔබ හට ඇති වූ quote()කාර්යය ලබා ගත හැකි වන විටත්.


4
නියම ඉඟිය, ජේ.ඩබ්ලිව්.ඩී. බාෂ් නූල් ඒවා අතර ඇති සුදු අවකාශය මඟ හැරීමෙන් සරල කළ හැකි බව මම නොදනිමි.
ඇලන් එච්.

ඇත්ත වශයෙන්ම විශ්මය දනවන ලකුණ ඔබ කෙළවරේ තිබේ නම් ඔබ බලාපොරොත්තු වූ පරිදි ක්‍රියා echo "Happy birthday!"කරනු ඇත. එසේ නොමැතිනම් ඔබට බැක්ස්ලෑෂ් එකකින් ගැලවිය හැකිය, නමුත් බැක්ස්ලෑෂ් මුද්‍රණය වනු ඇත. එක්ස්ඩී බෑෂ් හදවතේ ක්ලාන්තය සඳහා නොවේ :)
h4unt3r

@ h4unt3r: අමුතුයි, එය මගේ අත්දැකීමක් නොවේ. මට නම් echo "Happy Birthday!"පේළි 2 ක් ප්‍රතිදානය කරයි. පළමුවැන්න echo "Happy birthday"(පුදුමයක් නැත), දෙවැන්න "සුභ උපන්දිනයක්" (නැවතත්, පුදුමයක් නැත). ඔබ මෙම පරීක්ෂණය සිදු කරන විට ඉතිහාසය පුළුල් කිරීම සක්‍රිය කර තිබේද?
jwd

wjwd ඔබ ධාවනය කරන්නේ කුමන බාෂ් අනුවාදයද? මට සෑම විටම ඉතිහාසය පුළුල් වේ. ඔබ අහම්බෙන් දෙකක් පාවිච්චි කළාද !! ඔබේ පරීක්ෂණය සඳහාද?
h4unt3r

@ h4unt3r:, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)අනිවාර්යයෙන්ම !භාවිතා කරනුයේ එකක් පමණි . මම histexpandඉදිරිපත් කර ඇත $SHELLOPTS. කෙසේ වෙතත්, මම උත්සාහ කළේ 4.3.18 (2) - වෙනත් යන්ත්‍රයක් මත මුදා හැරීම, ඔබ විස්තර කළ පරිදි එය ක්‍රියා කරයි. මම හිතන්නේ එය නිවැරදි වූ දෝෂයකි.
jwd

67

ඉතිහාසය පුළුල් කිරීම අක්‍රිය කරන්න :

set +H

හෝ

set +o histexpand

ඔබ ~/.bashrcසාමාන්‍යයෙන් ඉතිහාසය පුළුල් කිරීම භාවිතා නොකරන්නේ නම් ඔබට එම විධානයන්ගෙන් එකක් එකතු කළ හැකිය .

Bash 4.3 විශේෂ අවස්ථාවක් එකතු කළේය :

ඉතිහාසය පුළුල් කිරීමේ චරිතය ද්විත්ව උපුටා දැක්වීමේ නූලකින් අවසන් ද්විත්ව උපුටා දැක්වීමට පෙර නම් එය උපුටා දැක්වීමක් ලෙස සලකනු ලැබේ


ස්තූතියි - මෙය ක්‍රියාත්මක විය, නමුත් මට කළ යුතුව තිබුණේ set +o histexpandනැත set -o histexpand. මෙය නිවැරදි කිරීම සඳහා ඔබේ පිළිතුර සංස්කරණය කළ හැකිද?
මතෙව්

අපොයි, යතුරු ලියනය, සමාවෙන්න. ස්ථාවර.
වැඩිදුර දැනුම් දෙන තුරු විරාමය.

විශිෂ්ටයි! AGES සඳහා මෙය සොයමින් සිටියේය .... thx vm! පැන යාම වැඩ නොකරනු ඇත ... මට තනි උපුටා දැක්වීම් ද භාවිතා කිරීමට අවශ්‍ය නැත ... මම මෙය මගේ .bashrcthx එකට එකතු කරමි !!, කිසි විටෙක !ස්ක්‍රිප්ට් වල භාවිතා කර නැත. එය සැමවිටම කරදරකාරී විය ...
ඇක්වාරියස් පවර්

මේක නම් නියමයි! echo "@AquariusPower!"
joehanna

13

ද්විත්ව උපුටා දැක්වීම් (") වෙනුවට තනි උපුටා දැක්වීම් (') භාවිතා කරන්න. තනි උපුටා දැක්වීම් ඒවායේ ඇති සියලු අර්ථ නිරූපණයන් අක්‍රිය කරන අතර ද්විත්ව උපුටා දැක්වීම් සමහරක් අක්‍රිය කරයි.

bzr commit -m 'It works!'

4

මම දැන් වෙනත් ක්‍රමයක් සොයාගෙන ඇත, එය අවම වශයෙන් echoඔබට විස්මිත ලක්ෂ්‍යයක් සමඟ විරාම ලිවීමට අවශ්‍ය ඉංග්‍රීසි නූල් (වාක්‍ය) සමඟ ක්‍රියා කරනු ඇත. එය බාෂ් හිස්ටෙක්ස්පෑන්ඩ් වටා අවසන් හෝ වැඩි වශයෙන් සිදු වන අතර කේත කිරීමට තව ටිකක් කල් ගතවේ.

Http://www.ascii-code.com/ හි ලැයිස්තුගත කර ඇති පරිදි විශ්මය ජනක ලක්ෂ්‍යයක් සඳහා වන හෙක්ස් 21 ක් වේ, එබැවින් ඔබ \x21ඔබේ නූල අවසානයේ තැබුවහොත් echo -e $foo, $fooඑහි පුළුල් ප්‍රතිරාවය සාදන්න [එනම්, foo=$(echo -e "$foo")] ඔබ echo $fooනැවත !කෙළවරේ ඇති නූලක් වන විට ලබා ගන්න . හිස්ටෙක්ස්පෑන්ඩ් මාරු කිරීමක් ද නැත.

Bash 4+ හි නිසැකවම ක්‍රියා කරයි. පෙර සංස්කරණ, ymmv.


හ්ම්ම් එය මට වැඩ කරන්නේ නැත.
lzap

ඔබ දෝංකාර දීම ගැන ඔබ කියන දේ මට ලැබෙන්නේ නැත. 'echo -e' සහ 'printf' මගින් පැන ගිය අෂ්ටක, හෙක්ස් සහ යුනිකෝඩ් කේත අර්ථ නිරූපණය කරයි. ඔබ ඒවායින් එකක් භාවිතා කරන අවස්ථාවන්හිදී, විශ්මයජනක ලක්ෂ්‍යය සඳහා නැගී සිටීමට ඔබට "\ 041" ("!" සඳහා අෂ්ටකය) හෝ "\ x21" (හෙක්ස්) භාවිතා කළ හැකිය. උදාහරණයක් ලෙස : printf "OMG\041". OP විසින් විමසන ලද බැඳීම් නූල් මෙන්, දෝංකාරය හෝ මුද්‍රණය නොවන තැනක ඔබ ද්විත්ව උපුටා ගත් නූලක් සාදන්නේ නම්, $(echo -e "\041")විශ්මය ජනක ලක්ෂ්‍යය තිබිය යුතු නූලට ඔබට ඇතුල් කළ හැකිය. මේ වගේ : bzr commit -m "This is a great commit$(echo -e "\041")".
ටොඩ් වෝල්ටන්
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.