Как сказать bash не расширять переменную $ _? - PullRequest
5 голосов
/ 18 марта 2012

Я хочу использовать некоторую строку perl, например:

perl -pe "$_=~s///e"

Проблема в том, что bash продолжает расширять переменную "$ _".Я мог бы поместить выражение perl в одинарные кавычки, но это помешало бы мне добавить некоторые переменные в скрипт.

Есть ли способ остановить bash от расширения переменной $ _?

Ответы [ 3 ]

11 голосов
/ 18 марта 2012
perl -pe '$_=~s///e'

или

perl -pe "\$_=~s///e"
5 голосов
/ 18 марта 2012

Прежде всего: вы знаете, что вы можете использовать $ENV{myvariable} для доступа к переменным окружения, верно? А что вам не нужно указывать $_ при использовании m//, s/// и tr///?

Кроме того, если вы хотите передать переменные в perl, есть и другие способы сделать это, кроме попытки интерполировать переменные оболочки в ваш код perl.

perl -we 'my ($var1, $var2, $var3) = @ARGV;' "$MYFOO" "$BAR" "$baz"

Если ваши переменные оболочки не содержат пробелов, вы можете обойтись без кавычек.

Теперь, если вы хотите использовать переключатели -p или -n, есть и обходные пути.

perl -pwe 'BEGIN { my $var1 = shift; my $var2 = shift } #code goes here'
    "$MYFOO" "$BAR" file1 file2 

Использование shift в операторе BEGIN приведет к удалению переменных из @ARGV, чтобы они не использовались неявным циклом while переключателей -p и -n.

1 голос
/ 18 марта 2012

Mix-и-матч.

perl -pe '$_=~s///e; echo "'"$idontknowperl"'"'

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

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