Perl однострочный с одинарной кавычкой - PullRequest
4 голосов
/ 24 февраля 2011

Я использовал однострочный Perl для создания оператора SQL, но не могу включить одинарные кавычки.

Это то, что я хочу: взять первую заявку и добавить к ней цитаты.

echo "a,b" | perl -F',' -lane 'print $F[0];'
 'a'

Я пробовал несколько разных способов, но у меня это не сработало.

1

echo "a,b" | perl -F',' -lane 'print qq('$F[0]');'
[0]

2

echo "a,b" | perl -F',' -lane 'print q('$F[0]');'
[0]

Вот еще один интересный.

Он печатает одиночную кавычку с оператором print, но если я присваиваю значение переменной и печатаю, он не работает.

perl -lwe "print q( i'am );"
 i'am

perl -lwe "$b=q( didn't ); print $b"

Можете ли вы помочь мне понять, как мы можем использовать одинарные и двойные кавычки в однострочниках Perl?

Ответы [ 4 ]

17 голосов
/ 24 февраля 2011

Вы не можете использовать одиночные кавычки в одиночку. Вы должны правильно их избежать, используя '\'' Это работает:

$ echo "a,b" | perl -F',' -lane 'print "'\''$F[0]'\''";'
'a'
10 голосов
/ 24 февраля 2011

Вам нужно узнать, как ваша оболочка обрабатывает кавычки.
Я бы просто использовал значение ASCII для ':

echo "a,b" | perl -F',' -lane 'print "$F[0]\047";'
a'
Операторы

q// и qq// также могут быть полезны в однострочниках.

2 голосов
/ 25 февраля 2011

Используйте переменную с восьмеричным значением:

echo "a,b" | perl -F',' -lane '$sq="\047"; print "$sq$F[0]$sq";'

Также сработает небольшая модификация вашей попытки # 1:

echo "a,b" | perl -F',' -lane "print qq{'\$F[0]'};"

Это использует двойные кавычки для внешнего набора и экранирует знак доллара, чтобы предотвратить интерпретацию оболочкой.

0 голосов
/ 24 февраля 2011

Размещение сценария в двойных кавычках, а не в одинарных кавычках, позволит вам использовать одинарные кавычки внутри скрипта без необходимости экранировать или использовать последовательности ANSI для представления одинарных кавычек.Вероятно, это наиболее эффективное и легко читаемое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...