Інтерполяція знака долара всередині котирувань у баші


9

Я запускаю цей маленький тестовий сценарій, який я написав:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

з командного рядка:

./test.sh "1092$212"

але знак долара викреслюється. Якщо я уникну, це спрацює. Але я думав, що подвійні цитати захистять мене від необхідності цього робити. Може хтось, будь ласка, допоможе мені зрозуміти, що відбувається і як це виправити?


Проблема в тому, що це неоднозначно - навіть для мене як для людини - чого ви тут хочете, тому комп'ютер не має шансів. Можливо, перекладач баш намагається отримати 212 доларів. Bash мовчки не вдається, якщо ви спробуєте розширити змінну, яка не існує, таким чином, $ викреслюється. Подумайте про те, як зафіксувати свої змінні у дужках, наприклад, "1092 $ {2} 12"
— Брайан Петерсон

Відповіді:


18

Змінні все ще розширені всередині подвійних лапок. Якщо ви хочете уникнути такої поведінки, замість цього використовуйте одинарні лапки.


Дякую. Це працює. Чи є для цього причина?
— Амір Афгані

8
Так. Це було розроблено саме так! Насправді дуже корисно мати можливість розширювати змінні всередині цитованого рядка. Це особливість. Якщо ви не хочете поведінки, використовуйте окремі цитати, саме для цього вони були розроблені.
— Калеб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.