විධානයන්හි `(බැක්කෝට් / බැක්ටික්) යන්නෙන් අදහස් කරන්නේ කුමක්ද?


190

මට පහත විධානය හමු විය:

sudo chown `id -u` /somedir

මම කල්පනා කරමි: `සංකේතයේ තේරුම කුමක්ද? උදාහරණයක් ලෙස ඉහත විධානය හොඳින් ක්‍රියාත්මක වන නමුත් පහත දැක්වෙන විධානය ක්‍රියාත්මක නොවන බව මම දුටුවෙමි.

sudo chown 'id -u' /somedir

Answers:


232

මෙය පසුබෑමකි . පසුපෙළක් උපුටා දැක්වීමේ ලකුණක් නොවේ. එයට විශේෂ අර්ථයක් ඇත. පසු විපරම් අතර ඔබ ටයිප් කරන සෑම දෙයක්ම ප්‍රධාන විධානයට පෙර ( chownඔබේ උදාහරණවල මෙන්) කවචය මගින් ඇගයීමට ලක් කරනු ලැබේ (ක්‍රියාත්මක කිරීම) , සහ එම ක්‍රියාත්මක කිරීමේ ප්‍රතිදානය එම විධානය මඟින් භාවිතා කරනු ලැබේ, ඔබ එම ස්ථානයේ එම ප්‍රතිදානය ටයිප් කළ ආකාරයටම විධාන රේඛාව.

ඉතින් කුමක් ද

sudo chown `id -u` /somedir

effectively ලදායී ලෙස ධාවනය වේ ( ඔබගේ පරිශීලක හැඳුනුම්පත අනුව ):

sudo chown 1000 /somedir
  \    \     \     \
   \    \     \     `-- the second argument to "chown" (target directory)
    \    \     `-- your user ID, which is the output of "id -u" command
     \    `-- "chown" command (change ownership of file/directory)
      `-- the "run as root" command; everything after this is run with root privileges

බොහෝ අවස්ථාවන්හිදී, බැක්ටික්ස් භාවිතා කිරීම හොඳ අදහසක් නොවන්නේ මන්දැයි දැන ගැනීමට මෙම ප්‍රශ්නය දෙස බලන්න .

Btw, ඔබට කවදා හෝ බැක්ටික් වචනාර්ථයෙන් භාවිතා කිරීමට අවශ්‍ය නම්, උදා: නූලකින්, ඔබට \ඊට පෙර බැක්ස්ලෑෂ් ( ) තැබීමෙන් එයින් ගැලවිය හැකිය .


44
මෙය බැක්ටික්ස් ඉතා හොඳින් පැහැදිලි කරයි, නමුත් කූඩුවල ප්‍රකාශන සඳහා ඉඩ ලබා දෙන $(your expression)ආකාරයටම භාවිතා කිරීම වඩා හොඳ ක්‍රමයකි $(). උදාහරණයක් ලෙස: විධානය cd $(dirname $(type -P touch))අඩංගු නාමාවලිය වෙත ඔබව යොමු කරනු ඇතtouch
Khaja Minhajuddin

11
Ha කජාමිංහාජුඩින් ඔබ නිසැකවම කැදැල්ල ගැන නිවැරදියි - ඉහත සඳහන් ප්‍රශ්නය එය විස්තරාත්මකව ආවරණය කරයි. නමුත් $()බොහෝ අවස්ථාවන්හිදී එය භාවිතා කිරීම හොඳ පුරුද්දක් යැයි මා සිතුවත් , එය පසුපෙළ වඩාත් නරක දෙයක් බවට පත් නොකරයි . ප්‍රායෝගික අරමුණු සඳහා, විධාන රේඛාවේ ටයිප් කිරීමට වඩා වේගවත් බව යමෙකු පිළිගත යුතුය (අවම වශයෙන් 5 ට සාපේක්ෂව යතුරු එබීම් 2 ක් ද ඇතුළුව Shift).
rozciorzewiacz

3
keyrozciorzewiacz ඔබගේ අවසාන ප්‍රකාශය බොහෝ යතුරුපුවරු සඳහා සත්‍ය විය හැකි නමුත් අවම වශයෙන් ප්‍රංශ යතුරුපුවරුවකට $( )වඩා ටයිප් කිරීම පහසුය ` `.
jlliagre

2
Ha කජාමිංහාජුඩින් ඔබට කූඩුවල කූඩු දැමිය හැකිය, නමුත් ඔබට 2 වන මට්ටමේ බැක්ටික්ස් වලින් ගැලවිය යුතුය, සහ 2 වන මට්ටමේ කැදැල්ලට ඔබට බැක්ටික් 3 ක්, 3 වන මට්ටමේ කූඩු 5 බැක්ටික්ස්, 4 වන මට්ටම 7, සහ ඇ.
ජස්ටින් සීබී

රූප සටහන ඇත්තෙන්ම නියමයි :)
වෙන්චෙන් ලී

73

තවත් කරුණු කිහිපයක් මෙහි එක් කිරීමට මම කැමතියි.

පසුපෙළ `…`සැබවින්ම විධාන ආදේශනය ලෙස හැඳින්වේ . විධාන ආදේශනයේ පරමාර්ථය වනුයේ බැක්ටික් තුළ තබා ඇති විධානය තක්සේරු කර එහි ප්‍රති result ලය සත්‍ය විධානයට තර්කයක් ලෙස සැපයීමයි.

විධාන ආදේශනය එක් ආකාරයකින් භාවිතා කරන ආකාර දෙකකින් කළ හැකි $(…)අතර අනෙක `…`. දෙකම එක හා සමානව ක්‍රියා කරයි, නමුත් $(…)ආකෘතිය නවීන ක්‍රමය වන අතර වඩාත් පැහැදිලි බව සහ කියවීමේ හැකියාව ඇත.

ඉතිං මොක ද

sudo chown $(id -u) /somedir

අනෙකට වඩා කැමති විය හැකිය.

ඔබ මෙහිදී සටහන් කළ යුතු තවත් දෙයක් නම් , බාෂ් ලේඛනයේ සඳහන් පරිදි බැෂ් උපුටා දැක්වීමේ නීති සමඟ විධාන ආදේශන සම්බන්ධතාවයයි .

ආදේශනය ද්විත්ව උපුටා දැක්වීම් තුළ දිස්වන්නේ නම්, වචන බෙදීම සහ ගොනු නාම පුළුල් කිරීම ප්‍රති .ල මත සිදු නොවේ.


8
එසේම, $(...)කූඩු වඩා හොඳය.
කුසලනන්ද

1
$()හා "``"එම මාර්ගය වැඩ කරන්නේ නැහැ
කුන්

10

පැහැදිලි කිරීමේ එක් සටහනක් කලාතුරකින් ආවරණය වේ:

බැක්ටික්ස් (සමහර විට එය ග්‍රේව්ස් ලෙසද හැඳින්වේ, මන්ද එය ප්‍රංශ සහ වෙනත් භාෂාවල පොදු උච්චාරණය මෙන් දෙගුණයක් වේ) සම්මත ප්‍රතිදානය පමණක් ආදේශ කරයි , නමුත් සම්මත දෝෂය නොවේ.

එබැවින් පෙර උදාහරණය දිගටම කරගෙන යාමට:

file `which hostname`

බලාපොරොත්තු වූ පරිදි ක්‍රියා කරනු ඇත, නමුත් දී:

file `which hostnameX`

whichදෝෂයක් නැවත ලබා දෙනු ඇති අතර, එම ප්‍රතිදානය අසල ඇති විධාන රේඛාවට ආදේශ කරනවාට වඩා සම්මත දෝෂයකට යයි file; සම්මත ප්‍රතිදානයක් කිසිසේත් නොතිබෙනු ඇත, එය ධාවනය කිරීමෙන් ඔබට තහවුරු කළ හැකිය:

which hostnameX

which hostnameX 2>/dev/null

මේ අවස්ථාවේ දී,

file `which hostnameX` 

දෝෂ පණිවිඩ දෙකක් නිපදවනු ඇත (පළමුවැන්න, කලින් which hostnameXසහ ඊට පසුව දෙවැන්න, ගොනුව නිසාම, ගොනුවේ නම නැති බව සොයා ගන්නා අතර, මුළු විධානයම

අත්‍යවශ්‍යයෙන්ම සාධාරණ ලෙස අඩු වනු ඇත:

file

ඇත්ත වශයෙන්ම, එය නරක භාවිතය වන අතර එය භාවිත දෝෂයක් ලබා දෙනු ඇත.

(ඔබට එය තනිවම පරීක්ෂා කිරීමට අවශ්‍ය නම් ඔබට උත්සාහ කළ හැකිය:

file `which hostnameX 2>/dev/null`    # just the file-command bad-usage error msg is printed

file `which hostnameX 2>/dev/null` 2>/dev/null  # now nothing is printed on the screen :)

4

බැක්ටික් `සංවෘත නූලෙහි අන්තර්ගතය ධාවනය කරයි, එබැවින් මේ වගේ දෙයක්

file `which hostname`

මඟින් සත්කාරක නාම විධානය වෙත යන මාර්ගය සොයා ගනු ඇත, පසුව එය සාදන ලද්දේ කෙසේදැයි ඔබට කියනු ඇත.

ඔබ ඔබේ ප්‍රශ්නයට ඇතුළත් කළ විධානය ක්‍රියාත්මක වන්නේ id -uuser ලදායී පරිශීලක හැඳුනුම්පත ලබා ගැනීම සඳහා වන අතර පසුව / somedir හි හිමිකාරිත්වය එම පරිශීලකයාට වෙනස් කරයි.


2

මෙම සංකේතයෙහි අර්ථය වන්නේ එහි ඇති ඕනෑම දෙයක් එම විධානයේ ප්‍රති result ලයක් ලෙස අර්ථ නිරූපණය කිරීමයි.

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

$ls /home
one two
$pwd
/usr/three
$cp `pwd` /home
$ls /home
one two three

ඉහත ප්‍රති results three/homeනාමාවලිය මගේ නාමාවලියට පිටපත් කරනු ලැබේ.


1

බැක්ටික්ස් විධාන ආදේශනයට සමාන වේ. මෙම බැක්ටික්ස් සින්ටැක්ස් පෞරාණික වන අතර වරහන් දෙකක් සහිත ඩොලර් ලකුණ පොදු බව දැන ගන්න : $().

විධාන ආදේශනය යනු කුමක්ද?

විධාන ආදේශනය යනු විධානයක් ක්‍රියාත්මක කිරීම සහ එහි ප්‍රතිදානය විචල්‍යයක් තුළ පසුකාලීන භාවිතය සඳහා ගබඩා කිරීම සඳහා කැපවූ සින්ටැක්ස් සහිත තනි මෙහෙයුමකි.

දිනය සමඟ උදාහරණයක්:

thedate=$(date)

එවිට අපට ප්‍රති result ලය මුද්‍රණය කළ හැකිය: 'දිනය% s \ n' "$ thedate" `.

  1. විධාන ආදේශන සින්ටැක්ස් වේ $().
  2. විධානයම වේ date.
  3. මේ දෙකම ඒකාබද්ධ $(date)කිරීමෙන් එහි ප්‍රතිදානය ආදේශකය වේ.
  4. printfඉහත විධානය අනුව විචල්‍යය මඟින් ප්‍රතිදාන අගය රඳවා තබා ගනිමු .
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.