විධාන ආදේශනය සඳහා සින්ටැක්ස් දෙකක් තිබේ: ඩොලර්-වරහන් සහ බැක්ටික්ස් සමඟ. ධාවනය top -p $(pidof init)
හා top -p `pidof init`
එම ප්රතිදානය ලබා දෙයි. මෙම ක්රම දෙකම එකම දේ කරනවාද, නැත්නම් වෙනස්කම් තිබේද?
විධාන ආදේශනය සඳහා සින්ටැක්ස් දෙකක් තිබේ: ඩොලර්-වරහන් සහ බැක්ටික්ස් සමඟ. ධාවනය top -p $(pidof init)
හා top -p `pidof init`
එම ප්රතිදානය ලබා දෙයි. මෙම ක්රම දෙකම එකම දේ කරනවාද, නැත්නම් වෙනස්කම් තිබේද?
Answers:
පැරණි විලාසිතාවේ බැක්කෝට්ස් ` `
බැක්ස්ලෑෂ් හා කැදැල්ල ටිකක් වෙනස් ලෙස සලකයි. නව විලාසිතාව $()
අතර ඇති සෑම දෙයක්ම ( )
විධානයක් ලෙස අර්ථ නිරූපණය කරයි.
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 ` `
තමන්ගේම අරමුණු සඳහා භාවිතා කරයි , මෙම පිළිතුර ලිවීම වේදනාවක් විය :)
{ }
සාමාන්යයෙන් හැඳින්වෙන්නේ "කැරලි වරහන්" හෝ "වරහන්" en.wikipedia.org/wiki/Braces_(punctuation)#Braces
`
මළ යතුරක් ඇත, එබැවින් මට ද්විත්ව බැක්ටික් එකක් (සාමාන්යයෙන් මට අමතක කළ හැකි දෙයක් පවා කළ හැකිය) හෝ බැක්ටික් පසුව අවකාශය ටයිප් කළ යුතුය. වේදනාව.
මා නිරීක්ෂණය කරන පැහැදිලි වෙනස නම් ඔබට කැදැල්ලට කැදැල්ලට බැසීමට නොහැකි $()
වීමයි. සමහරවිට දෙකම පවතින්නේ උරුම හේතු නිසා විය හැකිය. ඒ හා සමානව, .
සහ source
විධානයන් සමාන පද වේ.
source
. ඉර ඉර එක් උදාහරණයක්.
$(...)
හා `...`
සම්මත (මෙම දෙවැන්න පැවැත්ම නොසලකා හරිනු) වන අතර .
සම්මත පමණක් නොවේsource
(t)csh
ඒවා කූඩු කළ නොහැක. කෙසේ වෙතත් (t)csh
සහාය නොදක්වන්න $(...)
. ඔවුන් සහයෝගය දක්වයි source
( .
නමුත් නොවේ ).
$()
පැරණි බෝර්න් කවචය සමඟ ක්රියා නොකරයි. නමුත් එය කර වසර මට වයස Bourne shell සමඟ වැඩ සිට දශක.
තවත් සටහනක්, $()
බැක්ටික්ස් භාවිතා කිරීමට වඩා පද්ධති සම්පත් භාවිතා කරනු ඇත, නමුත් තරමක් වේගවත් වේ.
දී මාස්ටරිං Unix shell විධානාවලි , රැන්ඩල් කේ මයිකල් "ගොනු විස්තර-විසින්-සීමාව ක්රියාවලිය සඳහා 24 ක්රම" නම් පරිච්ඡේදයේ පරීක්ෂාව සිදු කර ඇත.
$()
ඔබගේ ස්ක්රිප්ට් එක භාවිතා කළ ප්රමාණයට වඩා එක් බයිට් එකක් විශාල කරවන බැවිනි `
(ඔබ ඒවා කැදැල්ලට නොගන්නේ යැයි සිතමු . විග්රහ කිරීමට වඩා වේගවත් වන්නේ නම්, එය ෂෙල් වෙඩි අතර වෙනස් වන අතර, නලයක් සෑදීමේ පිරිවැය හා විධාන ආදේශනය සඳහා වන ක්රියාවලිය අත්හිටුවීමේ පිරිවැයට සාපේක්ෂව එය නොසැලකිලිමත් වනු ඇත.
මෙහි අන් අය පැවසූ දේට එකතු කිරීම සඳහා, පේළිගත කිරීම් භාවිතා කරමින් පේළිගත අදහස් දැක්විය හැකිය:
echo foo `# I'm a comment!` bar
ප්රතිදානය : foo bar
.
වැඩි විස්තර සඳහා පහත සඳහන් දෑ බලන්න: https://stackoverflow.com/a/12797512 (එම ලිපියට පහළින් ඇති අදහස් ද සටහන් කරන්න.)
මෙම $()
කාරක රීති පැරණි bourne ෂෙල් සමග වැඩ කරන්නේ නැහැ.
නවතම කටු ` `
හා $()
සමාන වන නමුත් $()
ඔබ කූඩුව ගුණාකාර විධාන අවශ්ය වන විට බොහෝ විට ඔබට වඩාත් පහසු භාවිතා කිරීමයි.
උදාහරණයක් වශයෙන් :
echo $(basename $(dirname $(dirname /var/adm/sw/save )))
ටයිප් කිරීමට සහ නිදොස් කිරීමට පහසුය:
echo `basename \`dirname \\\`dirname /var/adm/sw/save \\\`\``