2016-01-05 2 views
0

Я создаю переменную, и часть ее создания связана с sed -n. Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, что она работает.Использование переменных в sed - не уверен, что он работает

y=$(ls -Ap | grep "/$" | sed -n "$ip") - первая строка и создает y.

Но когда я бегу

echo $y Я просто не получаю никакого вывода и пустое пространство. Поэтому я не уверен, работает ли sed или нет, и если нет, то как это исправить.

Заранее спасибо.

+1

Вам нужно скопировать переменную i.e 'sed -n" $ {i} p "' – 123

+0

Это большое спасибо, отлично работает. Из интереса переменная часть всегда должна быть заключена в квадратные скобки? – Rikg09

+0

, только если за ним следует символ, номер или знак подчеркивания, но всегда рекомендуется скопировать его, поскольку он дает более четкое представление о том, какая переменная вызывается, а также не имеет вредных эффектов. – 123

ответ

3

As User 123 mentioned, проблема в том, что bash пытается расширить $ip вместо $i. Вы можете использовать фигурные скобки вокруг имени переменной, чтобы избежать этого, например, ${i}.

Однако, я не предлагаю использовать раствор трубы с:

  • Parsing the output of ls is bad
  • Вы используете один инструмент слишком много, либо grep или sed будет достаточно.

Я предлагаю использовать find: Это может быть сделано с помощью одного вызова find:

find -mindepth 1 -maxdepth 1 -type d -name "*${i}*" 

Убедитесь, что ${i} установлен и не пуст! В противном случае -name будет расширяться до -name "**", который будет соответствовать чему угодно. Вы можете сделать это с помощью parameter substitution синтаксис:

find -mindepth 1 -maxdepth 1 -type d -name "*${i:-nonexistent}*" 

Убедитесь, что nonexistent не существует! ;)

+1

Отличное предложение использовать 'find'. Кроме того, если '$ {i}' на самом деле является регулярным выражением (как может быть предложено в использовании OP), опция '-regex' или' -iregex' для поиска может быть более подходящей, чем '-name'. Кроме того, вы можете избежать совпадения «ничего» (о котором вы предупреждаете), используя что-то вроде '' * $ {i: -nonexistent} * '' – ghoti

+0

@ghoti Хорошие очки! Особенно следует использовать '' * $ {i: -nonexistent} * "'. Позвольте мне добавить это. Благодаря! – hek2mgl

+1

Вы также можете пожаловаться на '$ {i:? Сообщение об ошибке}'; это даже останавливает скрипт. –

Смежные вопросы