Answers:
මෙය පසුබෑමකි . පසුපෙළක් උපුටා දැක්වීමේ ලකුණක් නොවේ. එයට විශේෂ අර්ථයක් ඇත. පසු විපරම් අතර ඔබ ටයිප් කරන සෑම දෙයක්ම ප්රධාන විධානයට පෙර ( 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, ඔබට කවදා හෝ බැක්ටික් වචනාර්ථයෙන් භාවිතා කිරීමට අවශ්ය නම්, උදා: නූලකින්, ඔබට \
ඊට පෙර බැක්ස්ලෑෂ් ( ) තැබීමෙන් එයින් ගැලවිය හැකිය .
$()
බොහෝ අවස්ථාවන්හිදී එය භාවිතා කිරීම හොඳ පුරුද්දක් යැයි මා සිතුවත් , එය පසුපෙළ වඩාත් නරක දෙයක් බවට පත් නොකරයි . ප්රායෝගික අරමුණු සඳහා, විධාන රේඛාවේ ටයිප් කිරීමට වඩා වේගවත් බව යමෙකු පිළිගත යුතුය (අවම වශයෙන් 5 ට සාපේක්ෂව යතුරු එබීම් 2 ක් ද ඇතුළුව Shift
).
$( )
වඩා ටයිප් කිරීම පහසුය ` `
.
තවත් කරුණු කිහිපයක් මෙහි එක් කිරීමට මම කැමතියි.
පසුපෙළ `…`
සැබවින්ම විධාන ආදේශනය ලෙස හැඳින්වේ . විධාන ආදේශනයේ පරමාර්ථය වනුයේ බැක්ටික් තුළ තබා ඇති විධානය තක්සේරු කර එහි ප්රති result ලය සත්ය විධානයට තර්කයක් ලෙස සැපයීමයි.
විධාන ආදේශනය එක් ආකාරයකින් භාවිතා කරන ආකාර දෙකකින් කළ හැකි $(…)
අතර අනෙක `…`
. දෙකම එක හා සමානව ක්රියා කරයි, නමුත් $(…)
ආකෘතිය නවීන ක්රමය වන අතර වඩාත් පැහැදිලි බව සහ කියවීමේ හැකියාව ඇත.
ඉතිං මොක ද
sudo chown $(id -u) /somedir
අනෙකට වඩා කැමති විය හැකිය.
ඔබ මෙහිදී සටහන් කළ යුතු තවත් දෙයක් නම් , බාෂ් ලේඛනයේ සඳහන් පරිදි බැෂ් උපුටා දැක්වීමේ නීති සමඟ විධාන ආදේශන සම්බන්ධතාවයයි .
ආදේශනය ද්විත්ව උපුටා දැක්වීම් තුළ දිස්වන්නේ නම්, වචන බෙදීම සහ ගොනු නාම පුළුල් කිරීම ප්රති .ල මත සිදු නොවේ.
$(...)
කූඩු වඩා හොඳය.
$()
හා "``"
එම මාර්ගය වැඩ කරන්නේ නැහැ
පැහැදිලි කිරීමේ එක් සටහනක් කලාතුරකින් ආවරණය වේ:
බැක්ටික්ස් (සමහර විට එය ග්රේව්ස් ලෙසද හැඳින්වේ, මන්ද එය ප්රංශ සහ වෙනත් භාෂාවල පොදු උච්චාරණය මෙන් දෙගුණයක් වේ) සම්මත ප්රතිදානය පමණක් ආදේශ කරයි , නමුත් සම්මත දෝෂය නොවේ.
එබැවින් පෙර උදාහරණය දිගටම කරගෙන යාමට:
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 :)
බැක්ටික් `සංවෘත නූලෙහි අන්තර්ගතය ධාවනය කරයි, එබැවින් මේ වගේ දෙයක්
file `which hostname`
මඟින් සත්කාරක නාම විධානය වෙත යන මාර්ගය සොයා ගනු ඇත, පසුව එය සාදන ලද්දේ කෙසේදැයි ඔබට කියනු ඇත.
ඔබ ඔබේ ප්රශ්නයට ඇතුළත් කළ විධානය ක්රියාත්මක වන්නේ id -u
user ලදායී පරිශීලක හැඳුනුම්පත ලබා ගැනීම සඳහා වන අතර පසුව / somedir හි හිමිකාරිත්වය එම පරිශීලකයාට වෙනස් කරයි.
බැක්ටික්ස් විධාන ආදේශනයට සමාන වේ. මෙම බැක්ටික්ස් සින්ටැක්ස් පෞරාණික වන අතර වරහන් දෙකක් සහිත ඩොලර් ලකුණ පොදු බව දැන ගන්න : $()
.
විධාන ආදේශනය යනු විධානයක් ක්රියාත්මක කිරීම සහ එහි ප්රතිදානය විචල්යයක් තුළ පසුකාලීන භාවිතය සඳහා ගබඩා කිරීම සඳහා කැපවූ සින්ටැක්ස් සහිත තනි මෙහෙයුමකි.
thedate=$(date)
එවිට අපට ප්රති result ලය මුද්රණය කළ හැකිය: 'දිනය% s \ n' "$ thedate" `.
$()
.date
.$(date)
කිරීමෙන් එහි ප්රතිදානය ආදේශකය වේ.printf
ඉහත විධානය අනුව විචල්යය මඟින් ප්රතිදාන අගය රඳවා තබා ගනිමු .
$(your expression)
ආකාරයටම භාවිතා කිරීම වඩා හොඳ ක්රමයකි$()
. උදාහරණයක් ලෙස: විධානයcd $(dirname $(type -P touch))
අඩංගු නාමාවලිය වෙත ඔබව යොමු කරනු ඇතtouch