O que “set -f” no Korn Shell faz?

2

No livro "Um guia para o aix 3.2", ele diz que é possível usar o comando set -f do Korn Shell para "desativar a geração de nome de arquivo", mas o que isso significa?

O que acontece com set -f ?

    
por elbarna 30.12.2016 / 20:30

2 respostas

7

set -f é o caminho portátil (ou seja, POSIX) para desabilitar a expansão de nomes de arquivos.

Quando ativada (por padrão ou com set +f ), a expansão de nome de arquivo é uma operação executada pelo shell que substitui, quando possível, argumentos de linha de comando que contêm:

  • ocorrências de curingas ( ? = qualquer caractere único e * = qualquer número de caracteres)
  • intervalos entre colchetes (por exemplo, [a-z12] = qualquer caractere de a a z ou 1 ou 2 )
  • listas não correspondentes (por exemplo, [^a-z] = qualquer caractere que não esteja no intervalo a to z )
  • e classes de caracteres (por exemplo, [[:xdigit:]] = qualquer caractere que possa ser usado para representar um número hexadecimal)

pelos nomes dos arquivos que correspondem a eles.

Quando desativado, esses argumentos permanecem inalterados.

$ pwd
/etc/samba
$ echo *
lmhosts smb.conf
$ echo *o??
smb.conf
$ set -f
$ echo *
*
$ echo *o??
*o??
    
por 30.12.2016 / 20:40
1

Em ambos, ksh e bash, o comando set -f desabilita a geração do nome do arquivo ("expansão do nome do caminho"). É equivalente a definir a opção noglob shell (em ambos os shells).

Evita que o shell expanda os padrões de globalização de arquivos:

$ ls -l
total 0
-rw-r--r--  1 kk  kk  0 Dec 30 21:39 hello
-rw-r--r--  1 kk  kk  0 Dec 30 21:39 world

$ echo *l[a-k]
world

$ echo *
hello world

$ set -o noglob

$ echo *
*

$ echo *l[a-k]
*l[a-k]

Para reverter (limpar) a configuração, use set +f ou set +o noglob .

    
por 30.12.2016 / 21:47

Tags