Eu queria:
#!/bin/bash
cmd --options \
option=value,\
option=value,\
option=value,\
option=value
Mas correndo com bash -x
eu consegui:
cmd --options option=value, option=value, option=value, option=value
Isso causa um erro.
Como posso fazer isso para que o bash não coloque automaticamente esse espaço em branco?
Bem, você tem espaços em branco no início de cada linha. Isso não é removido automaticamente pelo bash, embora seja compactado em um único espaço.
Para evitá-lo completamente, escreva o script como
Se você precisar passar uma string como
opt1=val1,opt2=val2,...
um único argumento para um comando, mas quiser tê-la em várias linhas no script para editabilidade, você pode usar uma matriz como uma etapa intermediária e depois unir todos os elementos da matriz ao executar o comando .Por exemplo
Isso imprime
somecmd --options opt1=val1,opt2=val2,etc.
(O primeiro par de parênteses faz parte da sintaxe de atribuição da matriz, o segundo inicia um subshell para proteger o resto do script do
IFS
. Esse subshell pode não ser necessário, especialmente se o script não fizer nada depois, ou se você apenas redefinirIFS
mais tarde ou não usá-lo.)Se você quiser colocar cada opção em sua própria linha, tente outra abordagem:
Outra opção:
printf "%s"
imprime os argumentos sem nenhum espaço em branco, resultando em:Alguns comandos também são capazes de remover espaços em branco por conta própria, desde que sejam passados como um único argumento. Portanto, citações simples (para evitar a divisão de palavras) podem ser suficientes, por exemplo,
ffmpeg
parece estar bem com isso:Mas isso depende de como o comando que você está usando lida com essas opções.
Ainda outra opção pode ser usar
--options
-se várias vezes (se o seu comando permitir), casoffmpeg
isso não funcione, mas às vezes está tudo bem.