Перший випадок:
echo $'$foo'
Яке відлуння $foo(тобто перше $в моїй команді ехо випало)
Перший $запускається як команда. Ехо не потребує пробілів між аргументами, воно просто займає їх.
Таким чином, echo $'$foo'розширюється для запуску команди $(яка не є командою, тому вона ігнорує), а потім echo '$foo'. Все '', що приймається, береться за номінал - він не розширює його чи нічого. Ви можете покласти те, що вам хочеться, і нічого не вийде.
Якщо замінити $з $$ним вторить ідентифікатор процесу.
Друге:
echo $"$foo"
Це відлуння pwd(це означає, що баш розширює $fooмою змінну до його значення)
Це тому, ""що не запобігає його розширенню. ""зазвичай використовується для того, щоб переконатися, що є значення для порівняння.
Якщо у вас є змінна, яка може бути порожньою (наприклад, це від grepрезультату), то ви хочете порівняти з іншим значенням / змінною, вам слід поставити першу змінну "". Це гарантує, що для перевірки завжди є порівняння, а не просто порожній розділ коду (як бачить баш), який дає помилку.
Нарешті, номер 3. Це цікаво.
echo $`$foo`
Це відлуння $~/scripts(я очікував, що він надрукує, ~/scriptsа не $~/scripts)
Це тому, що (в даному випадку) ехо $спочатку друкує персонажа. Якщо щось вставити в беккетки, це призводить до того, що значення змінної запускається як команда (кращий спосіб зробити це в останніх версіях bash $(command))
Тож спочатку воно відлунюється, $потім воно розширюється, `$foo`до `pwd`якого запускається і повертається ~/Scripts. Але ми мали $друк раніше - тому весь вихід є $~/Scripts.