scripting- Ignorando uma variável quando indefinido

1

HP-UX *** B.11.31 U ia64 **** licença de usuário ilimitado Olá,

var1=abc
var2=xyz
touch $var1 $var2 $var3

se o da variável não for definido, o comando falhará com

ksh: var3: parameter not set

Como fazemos o comando ignorar a variável que não está definida / definida e criar os arquivos para as variáveis que estão definidas. Sem loops. Apenas dentro do comando de toque. Obrigado

    
por user3146086 13.02.2015 / 12:18

2 respostas

1

Você receberia essa mensagem de erro se tivesse transformado a opção -u invocando ksh como ksh -u ou ksh -o nounset ou executando set -u ou set -o nounset .

touch $var1 $var2 $var3

está errado de qualquer forma, a menos que essas variáveis sejam destinadas a conter listas de padrões de arquivos.

Deveria ter sido:

touch -- "$var1" "$var2" "$var3"

Agora, se você quiser permitir que um deles fique vazio e não o transmita como um argumento vazio para touch nesse caso (e trabalhe em torno de set -u ), você escreverá:

touch -- ${var1:+"$var1"} ${var2:+"$var2"} ${var3:+"$var3"}

Outra opção é fazer:

(IFS=; set -f +u; touch -- $var1 $var2 $var3)

Com IFS= , desabilitamos divisão de palavras , com set -f globbing, mas contamos com o terceiro efeito colateral de deixar as variáveis sem aspas: remoção vazia . (e também desabilitamos nounset com set +u , tudo isso apenas em um subshell).

    
por 13.02.2015 / 12:34
0

Eu duvido que você possa fazer isso apenas em uma linha, você pode tentar algo assim

validate_touch()
{
for value in "$@"
do
if [ ! -z "$value" ]; then touch $value;fi
done
}
validate_touch new
    
por 13.02.2015 / 12:34

Tags