Pergunta da função de script de shell

2

Eu tenho este snippet de código em que estou trabalhando para um pequeno projeto que estou fazendo:

echo "Please enter SUID: ";
read $uid

uid_Assoc(){
        arg1=
        echo ;
}

uid_Assoc

Agora, para começar, gostaria que isso solicitasse uma string e lesse a string. De lá, eu gostaria de passar essa string como um argumento e ecoar. Mas não tenho certeza de como passar a string como parâmetro. Quando tento fazer algo como:

uid_Assoc($uid)

Ele lança um erro de sintaxe (imaginei que seria incorreto de qualquer maneira). Há alguma sugestão sobre como fazer isso?

UPDATE: Eu também tentei reorganizar o código um pouco para ficar assim:

function uid_Assoc(){
        arg1=
        echo ;
}
echo "Please enter SUID: ";
read $uid
uid_Assoc $uid

Mas isso também não parece funcionar.

    
por ryekayo 16.06.2014 / 17:37

2 respostas

3

Modifique seu script da seguinte forma:

#!/bin/bash

echo "Please enter SUID: ";
read uid

uid_Assoc () {
        arg1=""
        echo ""
        echo "$arg1"
}

uid_Assoc "$uid"

Você só precisa remover o prefixo $ antes de uid na chamada read .

    
por Sylvain Pineau 16.06.2014 / 17:48
4

O comando read usa uma variável name , portanto remova o sigil:

read uid

O que você está fazendo é: enviar o conteúdo da variável uid como o nome da variável para o comando de leitura. Como esse valor está vazio no momento, você tem

echo "a prompt: "
read

Esse é um código bash válido. O nome da variável padrão para um comando de leitura "careca" é REPLY

Dado seu código, aqui está uma reescrita leve:

function uid_Assoc {
        local arg1=
        echo "$arg1";
}

read -p "Please enter SUID: " uid
uid_Assoc "$uid"

Notas:

  • você não precisa da palavra-chave function e da sintaxe () , escolha uma ou outra (somente minha opinião)
  • localize variáveis em funções para limitar seu escopo
  • use a opção -p para ler
  • sempre cite variáveis referenciadas (você nunca sabe quantos espaços o usuário digitará), a menos que você saiba por que você precisa deixar uma variável sem aspas.
por glenn jackman 16.06.2014 / 17:46