Precisa de ajuda para entender os parâmetros que passam para os programas

0

Assumindo que p é um programa e v é uma variável que contém a string "a b c"

estou correto dizendo que

p $ v executará p com três parâmetros, que são a, b e c (então argc é 4 para um programa c)

p "$ v" executará p com um parâmetros, ou seja, "a b c" (então argc é 2 para um programa c)

    
por user2370139 12.07.2017 / 10:44

2 respostas

1

Um teste rápido teria lhe dito isso. Eu criei o seguinte script:

#!/bin/bash

PARAM1="$1"
PARAM2="$2"
PARAM3="$3"

echo "PARAM1: $PARAM1"
echo "PARAM2: $PARAM2"
echo "PARAM3: $PARAM3"

E a saída para ambos os casos é:

mtak@frisbee:~$ ./params.sh a b c
PARAM1: a
PARAM2: b
PARAM3: c
mtak@frisbee:~$ ./params.sh "a b c"
PARAM1: a b c
PARAM2: 
PARAM3: 

Então, sim, você está correto em sua declaração.

    
por 12.07.2017 / 10:57
1

a maneira de responder este programa é escrever um script de shell trivial (chamado "p"):

#! /bin/bash

echo "Arg 0: ".$0
echo "Arg 1: ".$1
echo "Arg 2: ".$2
echo "Arg 3: ".$3

Você pode então brincar com ele e ver o que ele produz, e você encontrará o seguinte:

(Lembre-se de executar v="a b c" antes de jogar com ele e passar p $ v (em vez de p 1 2 3 - que se comportará de maneira diferente)

argc = 2 em ambos os casos - o que faz sentido. As aspas na linha de comando significam agrupar todos os parâmetros em uma opção.

Se você precisa ter uma única variável com vários parâmetros, você sempre pode dividi-los no bash de forma simples, por exemplo, usando um script como

#! /bin/bash

i=0
for each in $@
do
       a[i]=$each
       i=$(( $i + 1 ))
done

echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}

Vai dividir as variáveis em elementos em uma matriz ($ a)

    
por 12.07.2017 / 10:58

Tags