Ескайпване на единична кавичка в Bash стринг


Има случаи, когато се налага Bash стринг в единични кавички да съдържа единична кавичка. Например
   
    - предаване на сложни аргументи на програми
    - използване на инструменти, които изискват специални символи, като sed
    - дефиниране на alias

За съжаление стринг в единични кавички не може да съдържа единична кавичка, или иначе казано първата кавичка след началото се приема за край на стринга. Например:

echo 'test \' 123'

се интерпретира като стрига test \, после 123, после началото на нов стринг. Има два подхода за постигане на това.

Затваряне на стринга пред единичната кавичка, единична кавичка и отваряне на нов стринг с единични кавички

По този начин нашият пример става

echo 'test '\'' 123'

Това извежда стринга на три части - 'test ', единична кавичка и ' 123'. Ето малко примери:

sed 's/'\''${\([0-9]*\)}'\''/\1/g' заменя числата, заобиколени с '${ and }' със самите тях, тоест '${5433}' -> 5433

alias funny_prompt='echo '\''$>'\' извежда $>

Използване на синтаксиса $'string'

Когато даден стринг е във формат $'string', всички знаци, предхождани от обратно наклонена черта (\), се заменят според правилата а ANSI C. Това като цяло означава, че \' става ', \" става " и така нататък. Тук трябва да се запомни, че ако е нужна обратна наклонена черта, тя трябва да е удвоена: \\. Горните примери се преобразуват до:

echo $'test \' 123'

sed $'s/\'${\\([0-9]*\\)}\'/\\1/g'

alias funny_prompt=$'echo \'$>\''    
   

 

Няма коментари

Обратно към списъка със статиите

Тази страница последно е променяна на 2024-04-20 16:57:28