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


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.