Shell, bash, linux; почему после объявления переменной ставится точка с запятой и что она делает?

Shell, bash, linux; почему после объявления переменной ставится точка с запятой и что она делает?

Вот эта линия.

    variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

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

  after the command(variable assignment) 
  and then run the command after semi-colon?

Тогда следующая строка будет такой же?

    variable=`ls -A $1 | grep '[abc]' | ls -1 $1`

Спасибо,

решение1

точка с запятой просто разделяет две последовательные команды. На странице руководства ( man bash) говорится (в главеСписки):

Команды, разделенные знаком ;, выполняются последовательно.

например, следующая команда сначала выполняет команду foo, а затем команду bar.

foo; bar

Чтобы правильно проанализировать ваш пример, вам сначала придется построить его иерархическую модель:

 variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

можно разбить на (что-то внутри обратных кавычек) и (то, что внутри обратных кавычек).variable=...ls -A $1 | grep '[abc]'; ls -1 $1

обратные кавычки используются для получения вывода команды (см.Замена командыв man bash); таким образом, вы присваиваете выходной сигнал целого ls -A $1 | grep '[abc]'; ls -1 $1переменной.

вывод команды substutited представляет собой список файлов, соответствующих определенному шаблону (включая скрытые файлы), дополненный полным списком файлов (для чего бы это ни использовалось...)

решение2

Нет, это не одно и то же, последний перешел бы grepв ls(что, скорее всего, не то, что вам нужно). Точка с запятой просто разделяет две разные команды.

Во-первых, вы, вероятно, захотите начать использоватьболее новый, более гибкий $( ... )вместо кавычек.

Возьмем в качестве примера:

$ var=`echo foo; echo bar`
$ echo "$var"
foo
bar

Вы можете думать, что обратные кавычки (или $( ... )) возвращают то, что было выведено на стандартный вывод во время выполнения кода, содержащегося между ними.

В вашем случае он смотрит на вывод ls -A $1once и ищет строку в своем выводе, содержащую a, b, или c, а затем печатает вывод в виде одного столбца ls -1 $1. В общем, это плохая идея,вам не следует разбирать ls.

Связанный контент