Eu tentei o seguinte:
myprogram $'Hello $HOME'
Mas não funcionou (o argumento da linha de comando recebido por myprogram
era Hello $HOME
, e não o valor de $HOME
).
Se eu fizer algo assim:
IFS=,
x=hello,hi,world
echo $x
Então três argumentos serão extraídos (que são hello
e hi
e world
), e esses três argumentos serão passados para echo
.
Mas quando eu não uso uma variável:
IFS=,
echo hello,hi,world bye
Então a divisão de palavras acontecerá usando o delimitador de espaço e não o delimitador de vírgula e, portanto, os dois argumentos gerados e passados echo
serão hello,hi,world
e bye
.
Existe uma maneira de fazer a divisão de palavras funcionar com um delimitador sem espaço quando não estiver usando uma variável?
Quando defino a IFS
variável para um espaço, bash
trata vários espaços como um espaço ( myprogram
é um programa que imprime os argumentos de linha de comando que recebe):
IFS=" "
x="hello hi world"
./myprogram $x
argv[1] = hello
argv[2] = hi
argv[3] = world
Mas quando defino a IFS
variável para uma vírgula, bash
não trata várias vírgulas como uma vírgula:
IFS=","
x="hello,,,hi,,,world"
./myprogram $x
argv[1] = hello
argv[2] =
argv[3] =
argv[4] = hi
argv[5] =
argv[6] =
argv[7] = world
Por que é que?