Pegar 'espaço' na linha de comando [RESOLVIDO]

1. Pegar 'espaço' na linha de comando [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 03/12/2015 - 23:01h

Como eu passo uma string pro meu programa pela linha de comando de forma que ela inclua o caractere espaço? Tentei usar aspas na string mas só lê os caracteres até o espaço e ignora o resto.


  


2. Re: Pegar 'espaço' na linha de comando

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/12/2015 - 02:35h

Linha de comando do shell? Se for, isso é resolvido no nível do próprio shell, em resposta ao uso que você fizer das aspas ou apóstrofos.

Uma quantidade qualquer de espaços ou tabulações que não estejam entre aspas ou apóstrofos nem escapados com uma barra invertida (“\”) conta como um único separador de argumentos (ou como nada, se vierem antes da primeira palavra da linha ou depois da última). Já os espaços escapados com \ ou cercados por aspas ou apóstrofos são reconhecidos como parte da palavra que constitui um nome de comando ou argumento.

Veja: se você digitar a seguinte linha de comando

meu_programa "Este argumento  contém   espaços" a     \   b\ c 'Este contém uma (	) tabulação' 


o shell eventualmente vai executar algo com efeito semelhante a

char **argv;
argv=malloc(7*sizeof(*argv)); // Porque a linha de comando tem 6 partes
argv[0]="meu_programa";
argv[1]="Este argumento contém espaços"; // 1, 2 e 3 espaços, respectivamente, como na linha de comando
argv[2]="a";
argv[3]=" ";
argv[4]="b c";
argv[5]="Este contém uma (\t) tabulação";
argv[6]=NULL;
execvp("meu_programa", argv);


e isso vai fazer com que o seu programa receba valores correspondentes nos argumentos argc e argv da função main(), fazendo a assertiva abaixo verdadeira.

assert(
argc==6 &&
strcmp(argv[0], "meu_programa")==0 &&
strcmp(argv[1], "Este argumento contém espaços")==0 &&
strcmp(argv[2], "a")==0 &&
strcmp(argv[3], " ")==0 &&
strcmp(argv[4], "b c")==0 &&
strcmp(argv[5], "Este contém uma (\t) tabulação")==0 &&
argv[6]==NULL
);


NOTA: Para conseguir produzir o caráter de tabulação da linha de comando do bash (e eventualmente outros shells interativos), você provavelmente terá de usar Control-V antes de apertar a tecla Tab. O Control-V faz com que o próximo caráter recebido seja tomado literalmente, eventualmente perdendo sua função de caráter de controle.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts