Pergunta sobre ordem de expansão de variável e nome de caminho no Bash

0

Sou muito novo no Linux. Abaixo está uma pergunta de um exercício no tutorial que estou seguindo. Meu problema é que não tenho certeza se entendi completamente a pergunta. Se alguém puder confirmar que meu entendimento está correto, ficaria imensamente grato!

A pergunta afirma: O Bash expande as variáveis antes de expandir os nomes de caminho (globbing). Supondo que ele fez o contrário (ou seja, expanda nomes de caminho antes de expandir as variáveis), é possível escrever um script bash que use expansão de variável e expansão de caminho, de forma que o resultado seja o mesmo independentemente da ordem de expansão. / p>

Como eu disse, não tenho certeza se estou entendendo corretamente, mas com base em meu conhecimento e compreensão limitados, desenvolvi o seguinte script simples.

#!/bin/bash

# Create a variable called myvar1
myvar1=~
echo $myvar1

# Use both path expansion and variable expansion with the ls command
# Assuming the variable was expanded first, the out should be the same as if the path was expanded first. Is my assumption correct?
ls $myvar1/*.txt  

Alguém pode confirmar que meu entendimento está correto e que meu roteiro responde à pergunta de forma satisfatória?

Muito obrigado!

    
por Automation Zombie 24.03.2017 / 00:00

1 resposta

0
ls $myvar1/*.txt 

Se nomes de caminhos fossem expandidos antes de variáveis, isso procuraria nomes de arquivos correspondentes a *.txt em um diretório chamado $myvar1 , o que você provavelmente não teria. Depois disso, ele expandiria $myvar1 para o caminho para seu diretório inicial, deixando /home/username/*.txt , que não é o mesmo que expandir o caminho primeiro e depois procurar por nomes de arquivos terminados em .txt no diretório inicial.

Em geral, como os nomes de arquivos podem conter sinais $ , acho que a ordem de expansão sempre será importante. Considere qualquer script usando um glob como * em um diretório contendo um arquivo chamado $PATH .

O oposto, variáveis contendo caracteres glob, é mais fácil de contornar, já que você controla os valores de suas variáveis.

    
por 24.03.2017 / 11:37