O que esses símbolos em alguns comandos terminais do Linux significam? [fechadas]

12

No AskUbuntu, eu vi alguns comandos em torno disso parecerem bastante complicados, com muitos símbolos neles. Para entender melhor como esses comandos são construídos, gostaria de saber o que os símbolos significam.

Por exemplo:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

ou ainda mais complicado:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

Eu entendo muito bem que adicionar parâmetros como -c , --debug , tem certos efeitos no principal comando. Os significados destes são, em quase todos os casos, encontrados nas páginas man , então não é exatamente isso que estou procurando.

Por favor, tente em sua resposta para definir o que os símbolos fazem especificamente, em vez de explicar os exemplos que dei. Isso poderia ser assim:

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

Obrigado antecipadamente

    
por Exeleration-G 06.12.2011 / 21:38

6 respostas

14

Veja O Manual de Referência do Bash chamado Operação da Shell e o Guia avançado de script de script Capítulo 3 (Caracteres especiais) .

Eu me refiro àqueles sempre que eu precisar aprender algo novo sobre scripts de shell no Ubuntu / Linux.

Acho que você achará o Capítulo 3 do ABS mais fácil de navegar para seus propósitos. Todos os símbolos são vistos na extrema esquerda da página com uma descrição imediatamente abaixo deles.

    
por SaultDon 06.12.2011 / 22:45
7

Infelizmente, você precisa ir para as man pages, já que os "símbolos" podem ter diferentes significados dependendo de qual comando os está lendo.

Por exemplo, no seu primeiro comando, o significado de {} e \; dependa do comando find (man find). O significado de aspas em um argumento para sed é dependente de sed ou bash (como é um parâmetro citado, pode potencialmente ser uma coisa de shell). O ~ / é definitivamente uma coisa de expansão do padrão bash.

Para o segundo comando complicado, ele está ecoando bastante, então você encontrará mais informações sobre isso na página man do bash.

Para responder ao seu comentário, os caracteres de redirecionamento > < | são usados para canalizar coisas de e para arquivos (o maior e menor que sinais) e para conectar a saída de um comando com a entrada de outro (o pipe |). Veja aqui para um bom tutorial sobre o redirecionamento de I / O, este é um recurso de design muito poderoso o shell e o conjunto de ferramentas do Unix.

    
por roadmr 06.12.2011 / 22:46
3

A primeira pesquisa por arquivos que terminam em .c no diretório ~/ e exec utes sed (editor de simplificação), em que o sed s pesquisa cybernetnews e o altera em cybernet .

O segundo que me escapa ... mostra um resultado vazio quando executado.

    
por Rinzwind 06.12.2011 / 21:45
2

O melhor recurso que encontrei para aprender comandos de terminal é LinuxCommand , ele fornece descrições detalhadas dos comandos mais usados disponíveis.

    
por Mark Rooney 06.12.2011 / 21:55
1

É difícil dizer o significado completo dos símbolos enquanto você está colando comandos complexos.

O eco em particular.

Veja o eco do homem para o -e, ele permite a fuga, então o mais recente é uma fuga.

A maioria dos outros símbolos são manipulações de strings.

Então, imagine que você tenha uma variável i que contenha uma string "foo"

i=foo;echo $i
foo

Mas se torna mais complexo se sua variável, $ i, também faz parte de uma string

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

Agora você pode manipular as strings também, imprimir apenas uma parte

No seu caso

$ {i # * =} = imprimir $ i, desmarque a menor correspondência entre * e =, mas * em si é um caractere curinga.

echo ${i#o}
foo

echo ${i#*o}
o

Veja o link

Em seguida, atingimos um sub shell (x ...)

O Bash processará os comandos no sub shell e retornará a saída dos comandos.

x = (uma sub-string de i) ; continue

Agora temos um teste, ["$ {! x}"]

Veja: link

E aqui é onde eu não posso mais te dizer.

No bash, $ {! x} será uma string vazia. & amp; & amp; == lógico e || é lógico ou

teste {string vazia} E echo string vazia ou echo x

Você precisaria dar mais sintaxe, mas parece que esse eco é um piping de saída em algum lugar.

Novamente [] é um teste e escapamos de um [no começo.

Então, só posso explicar muito do que o eco está fazendo.

A razão pela qual não há saída quando você insere o comando echo em um terminal é que é um snipit de código, por padrão nem x ou i são definidos, portanto, toda a saída está vazia.

    
por Panther 06.12.2011 / 23:50
1

Para perguntas sobre símbolos em idiomas específicos, convém experimentar o SymbolHound. Você pode pesquisar na Web os caracteres que o Google não usa. encontrar.

    
por Tom 28.04.2012 / 19:31