Stuff (දේවල්) සහ `දේවල්` අතර වෙනස කුමක්ද?


270

විධාන ආදේශනය සඳහා සින්ටැක්ස් දෙකක් තිබේ: ඩොලර්-වරහන් සහ බැක්ටික්ස් සමඟ. ධාවනය top -p $(pidof init)හා top -p `pidof init`එම ප්රතිදානය ලබා දෙයි. මෙම ක්‍රම දෙකම එකම දේ කරනවාද, නැත්නම් වෙනස්කම් තිබේද?



44
තත්පරයකට මම සිතුවේ මෙය jQuery ප්‍රශ්නයක් බවයි.
ඩේවිඩ් මර්ඩොක්

ප්රති result ලය කවචය මත රඳා පවතී - සමහරක් දෙකම සහාය දක්වයි.
artdanil

Answers:


364

පැරණි විලාසිතාවේ බැක්කෝට්ස් ` `බැක්ස්ලෑෂ් හා කැදැල්ල ටිකක් වෙනස් ලෙස සලකයි. නව විලාසිතාව $()අතර ඇති සෑම දෙයක්ම ( )විධානයක් ලෙස අර්ථ නිරූපණය කරයි.

echo $(uname | $(echo cat))
Linux

echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat

කැදැලි සහිත පසුබිම් ගැලවී ගියහොත් ක්‍රියා කරයි:

echo `uname | \`echo cat\``
Linux

බැක්ස්ලෑෂ් විනෝදය:

echo $(echo '\\')
\\

echo `echo '\\'`
\

නව විලාසිතාව $()සියලුම POSIX - අනුකූල ෂෙල් වෙඩි සඳහා අදාළ වේ .
ලෙස mouviciel පෙන්වා, පැරනි පන්නයේ ` `පැරණි ෂෙල් වෙඩි සඳහා අවශ්ය විය හැකි.

තාක්ෂණික දෘෂ්ටි කෝණය හැරුණු විට, පැරණි විලාසිතාවට ` `දෘශ්‍ය අවාසියක් ද ඇත:

  • දැකීමට අපහසු: I like $(program) better than `program`
  • තනි උපුටා දැක්වීමකින් පහසුවෙන් ව්‍යාකූල වේ: '`'`''`''`'`''`'
  • ටයිප් කිරීම එතරම් පහසු නැත (සමහර විට යතුරුපුවරුවේ සම්මත පිරිසැලසුමෙහි පවා නැත)

(සහ SE ` `තමන්ගේම අරමුණු සඳහා භාවිතා කරයි , මෙම පිළිතුර ලිවීම වේදනාවක් විය :)


10
මම එකතු කරන එකම දෙය නම්, මම '(' පාරෙන් එකක් නොව වරහනක් නොවේ (එය '[') ලෙස හැඳින්වීමයි.
කෙන්ඩල් හෙල්ම්ස්ටෙටර් ජෙල්නර්

End කෙන්ඩල්: මෙන්න මම හිතුවා ඒ අවුරුදු ගණනාව පුරාම වම් වරහන '{' කියලා ...
SamB

5
AmSam: { }සාමාන්‍යයෙන් හැඳින්වෙන්නේ "කැරලි වරහන්" හෝ "වරහන්" en.wikipedia.org/wiki/Braces_(punctuation)#Braces
Jrn Schou-Rode

2
මම '{' වක්‍ර වරහන් ලෙසද හඳුන්වමි. එය අමුතු බවක් පෙනුනද, ඔබ අනෙක් දේවල් වරහන් ලෙස හැඳින්වුවහොත් සුදුසුකම් ලත් "වක්‍ර" එකතු කළ යුතුය ... මම හිතන්නේ එය සැබවින්ම වක්‍ර වී ඇති නිසාය.
කෙන්ඩල් හෙල්ම්ස්ටෙටර් ජෙල්නර්

1
එක්සත් ජනපද / එක්සත් රාජධානියේ යතුරුපුවරුවල මම නොදනිමි, නමුත් ස්පා spanish ් key යතුරුපුවරුවෙහි `මළ යතුරක් ඇත, එබැවින් මට ද්විත්ව බැක්ටික් එකක් (සාමාන්‍යයෙන් මට අමතක කළ හැකි දෙයක් පවා කළ හැකිය) හෝ බැක්ටික් පසුව අවකාශය ටයිප් කළ යුතුය. වේදනාව.
Darkhogg

41

මා නිරීක්ෂණය කරන පැහැදිලි වෙනස නම් ඔබට කැදැල්ලට කැදැල්ලට බැසීමට නොහැකි $()වීමයි. සමහරවිට දෙකම පවතින්නේ උරුම හේතු නිසා විය හැකිය. ඒ හා සමානව, .සහ sourceවිධානයන් සමාන පද වේ.


10
සමහර බෝර්න්-ව්‍යුත්පන්න ෂෙල් වෙඩි හඳුනා නොගනී source. ඉර ඉර එක් උදාහරණයක්.
වැඩිදුර දැනුම් දෙන තුරු විරාමය.

14
එය සත්‍යයක් නොවේ. ඔබට වඩාත් වේදනාකාරී ලෙස ඕනෑම මට්ටමකට කූඩුව බැසීමට හැකිය. දෙකම සටහන $(...)හා `...`සම්මත (මෙම දෙවැන්න පැවැත්ම නොසලකා හරිනු) වන අතර .සම්මත පමණක් නොවේsource
Stéphane Chazelas

3
නිවැරදි කිරීම, (t)cshඒවා කූඩු කළ නොහැක. කෙසේ වෙතත් (t)cshසහාය නොදක්වන්න $(...). ඔවුන් සහයෝගය දක්වයි source( .නමුත් නොවේ ).
ස්ටෙෆාන් චසෙලාස්

28

$()පැරණි බෝර්න් කවචය සමඟ ක්‍රියා නොකරයි. නමුත් එය කර වසර මට වයස Bourne shell සමඟ වැඩ සිට දශක.


1970 දශකයේ හා 1980 ගණන්වල මුල් භාගයේ මෙන් පැරණිද?
ක්‍රිස්ටෝපර්

6

තවත් සටහනක්, $()බැක්ටික්ස් භාවිතා කිරීමට වඩා පද්ධති සම්පත් භාවිතා කරනු ඇත, නමුත් තරමක් වේගවත් වේ.

දී මාස්ටරිං Unix shell විධානාවලි , රැන්ඩල් කේ මයිකල් "ගොනු විස්තර-විසින්-සීමාව ක්රියාවලිය සඳහා 24 ක්රම" නම් පරිච්ඡේදයේ පරීක්ෂාව සිදු කර ඇත.


2
මෙම ප්‍රකාශය විකාරයකි. එය හුදෙක් පාර්සර් සඳහා වෙනත් අංකනයක් භාවිතා කරන බැවින් එය වේගවත් වීමට හේතුවක් නැත.
schily

chchchily: සමහර විට, මම පොතෙන් උපුටා දක්වන්නේ, වැඩි විස්තර සඳහා ඔබට එය කියවිය හැකිය.
cuonglm

3
මම ch ෂිලි සමඟ එකඟ වීමට නැඹුරු වෙමි ... එයට වැඩි සම්පත් අවශ්‍ය වන්නේ ඇයි?
වයිල්ඩ්කාඩ්

2
Ild විල්ඩ්කාඩ්, මම හිතන්නේ එය $()ඔබගේ ස්ක්‍රිප්ට් එක භාවිතා කළ ප්‍රමාණයට වඩා එක් බයිට් එකක් විශාල කරවන බැවිනි `(ඔබ ඒවා කැදැල්ලට නොගන්නේ යැයි සිතමු . විග්‍රහ කිරීමට වඩා වේගවත් වන්නේ නම්, එය ෂෙල් වෙඩි අතර වෙනස් වන අතර, නලයක් සෑදීමේ පිරිවැය හා විධාන ආදේශනය සඳහා වන ක්‍රියාවලිය අත්හිටුවීමේ පිරිවැයට සාපේක්ෂව එය නොසැලකිලිමත් වනු ඇත.
ස්ටෙෆාන් චසෙලාස්

5

මෙහි අන් අය පැවසූ දේට එකතු කිරීම සඳහා, පේළිගත කිරීම් භාවිතා කරමින් පේළිගත අදහස් දැක්විය හැකිය:

echo foo `# I'm a comment!` bar

ප්‍රතිදානය : foo bar.

වැඩි විස්තර සඳහා පහත සඳහන් දෑ බලන්න: https://stackoverflow.com/a/12797512 (එම ලිපියට පහළින් ඇති අදහස් ද සටහන් කරන්න.)


1

මෙම $()කාරක රීති පැරණි bourne ෂෙල් සමග වැඩ කරන්නේ නැහැ.
නවතම කටු ` `හා $()සමාන වන නමුත් $()ඔබ කූඩුව ගුණාකාර විධාන අවශ්ය වන විට බොහෝ විට ඔබට වඩාත් පහසු භාවිතා කිරීමයි.

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

echo $(basename $(dirname $(dirname /var/adm/sw/save )))

ටයිප් කිරීමට සහ නිදොස් කිරීමට පහසුය:

echo `basename \`dirname \\\`dirname /var/adm/sw/save \\\`\``

1
$ () ලස්සන ලෙස පෙනුනද, ද්විත්ව පුනරාවර්තන විග්‍රහයක් අවශ්‍ය බැවින් අදාළ පාර්සර් එකක් ක්‍රියාත්මක කිරීමේදී එය වේදනාවක් වේ.
schily

6
chchchily අනෙක් පැත්තෙන්, හොඳ විග්‍රහයක් නැති කවචයක් යනු කුමක්ද?
එමානුවෙල්

1
ගැටළුව වන්නේ ඔබ පාර්සර් ඇමතීමට පෙර නූල අවසන් වන්නේ කොතැනින්ද යන්න දැන ගැනීමයි. මෙය බැක්ටික්ස් සමඟ සාපේක්ෂව සරල ය, නමුත් එය කවචයේ විවිධ අරමුණු සඳහා භාවිතා කරන බැවින් වරහන් සමඟ එය දුෂ්කර ය. එබැවින් ඔබට දෙවරක් සහ බෝර්න් ෂෙල් හි නොපවතින අයුරින් පාර්සර් අවශ්‍ය වේ.
schily
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.