Assum p - программа, а v - переменная, содержащая строку "ab c"

я прав, говоря, что

p $ v запустит p с тремя параметрами: a, b и c (поэтому argc равно 4 для программы ac)

p «$ v» будет запускать p с одним параметром, то есть "ab c" (поэтому argc равен 2 для программы ac)

2 ответа2

1

Быстрый тест сказал бы тебе это. Я создал следующий скрипт:

#!/bin/bash

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

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

И вывод для обоих случаев:

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: 

Так что да, вы правы в своем заявлении.

1

способ ответить на эту программу - написать простой скрипт оболочки (называемый "p"):

#! /bin/bash

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

Затем вы можете поиграть с ним и посмотреть, что он производит, и вы найдете следующее:

(Не забудьте запустить v = "ab c", прежде чем играть с ним, и передать p $ v (вместо p 1 2 3 - что будет вести себя по-другому)

argc = 2 в обоих случаях - что имеет смысл. Кавычки в командной строке означают группирование всех параметров в 1 опцию.

Если вам нужна одна переменная с несколькими параметрами, вы всегда можете разделить их в bash довольно просто, например, используя скрипт

#! /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]}

Разделит переменные на элементы в массиве ($ a)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .