O que a expressão começa com traço médio na atribuição de shell?

0

Eu tentei usar JAVA_OPTS = -Xms1024m -Xmx1024m ... em um arquivo de script. Ele mostra erro como "-Xmx1024m: comando não encontrado".

Depois de citar a atribuição em aspas duplas ou simples, o erro desaparece.

E descobri que o erro é causado pelo primeiro sinal de traço. Porque todas as atribuições como "a = -bb xx yy ..." irão gerar o mesmo erro: ele tentou rodar o xx como um programa. Parece que o shell reconhece a segunda palavra como um comando se a primeira palavra começar com um sinal de traço, desde que não haja aspas na expressão de atribuição.

Então, minha pergunta é: o que a expressão de atribuição começa com sign sign no shell? Estou usando o bash como padrão.

    
por efan 17.01.2017 / 03:23

1 resposta

1

Em primeiro lugar, você deve estar citando suas variáveis:

JAVA_OPTS="-Xms1024m -Xmx1024m"

Como a variável não foi citada, no seu comando original, apenas JAVA_OPTS=-Xms1024m foi interpretado como atribuição de variável e -Xmx1024m como um nome de comando. Isso geralmente é chamado de configuração de variável de ambiente para comando. Por exemplo,

LC_ALL=C  date +%s

modificaria o ambiente de date com a configuração LC_ALL=C (que está executando date com a localidade inglesa, mesmo que você tenha outra coisa definida). Observe a diferença aqui - LC_ALL = C não tem espaços, então a divisão de palavras não ocorre, que é o que está acontecendo no caso de JAVA_OPTS=-Xms1024m -Xmx1024m

Em segundo lugar, o traço significa estilo curto de opções. Há também um estilo longo, por exemplo, bash --posix ou ls --format=long . Por que traço? Convenção histórica. Deve-se notar que o padrão POSIX requer apenas versões curtas dos argumentos da linha de comando.

    
por 17.01.2017 / 05:10

Tags