Например я хочу сказать
perl -e 'print '"'"'Hello, world!'"'"', "\n";'
Есть ли менее неловкий способ сделать это, например, избежать одиночных кавычек?
Да я знаю что могу написать
perl -e 'print q[Hello, world!], "\n"'
perl -e 'print "Hello, world!\n"'
Но этот вопрос касается цитирования в оболочке, а не в Perl.
Я заинтересован , как сделать это в bash
и csh
в первую очередь.
источник
blah <<\EOF … EOF
. Вы также можете использовать<<'EOF'
и<<"EOF
. Все они означают буквальные здесь документы (в отличие от Perl). Если бы вы были действительно настроены, вы могли бы это сделатьblah "$(cat<<\EOF … EOF )" other args
(используя переводы строк, где я написал пробелы в подстановке команд; ksh и zsh могут обходиться без cat , другим это нужно). Но стоит ли это того?echo '\U0000068\U000069'
повторяет 'hi'. Не уверен, почему, хотя, если это не ошибка в оболочке.\U
в этом случае выполняется с помощью встроенной команды echo (этим поведением можно управлять с-E
помощью параметра BSD_ECHO и-e
). Вы можете видеть, что литеральная строка передается (и не интерпретируется иначе) в других командах; напримерprintf %s\\n '\U0000068\U000069'
.Для меня все ваши примеры дают:
И так же это:
И это:
Можете ли вы уточнить, что вы пытаетесь сделать?
В оболочке, такой как Bash, если вы хотите печатать кавычки как часть строки, один тип кавычек избегает другого.
Редактировать:
Вот еще один способ:
Пробел после восклицательного знака позволяет избежать ошибки расширения истории. Я мог бы сделать
set +H
вместо этого.источник
Не уверен, что мое изменение к предыдущему ответу будет отображаться:
Вставить так же, как новый ответ:
Альтернативный подход:
Когда я попробовал ваше решение, я все еще не смог распечатать.
Но я воспользовался вашим решением и попробовал следующее:
ASCII значение 'составляет 39.
Мне нужно было это сделать встроенное редактирование группы файлов, чтобы добавить их в интересующем месте.
источник
Здесь документ - лучший способ не заботиться о побеге:
Вы можете полностью заблокировать все расширения, используя приведенный здесь документ:
Если вы хотите передать его в качестве аргумента вместо ввода, вы можете использовать xargs:
источник
Я не знаю, есть ли возможность сделать это в Bash, но с Zsh вы можете использовать
''
после включенияRC_QUOTES
опции. (Я бы рекомендовал попробовать zsh; он в основном совместим с bash и может эмулировать bash для еще большей совместимости.)С bash (и все еще большую часть времени с zsh) я просто использую,
'\''
потому что его легче читать, чем'"'"'
.Я понятия не имею, как это сделать в csh.
источник
Вы можете использовать \ 'и \ "для экранирования кавычек с perl, если они используются внутри как часть скрипта perl. Я не уверен, что командная строка примет это, хотя. Вы можете попробовать это и посмотреть, работает ли он.
источник