Книга: Искусство программирования на языке сценариев командной оболочки

Пример 9-7. Противоречия в переменных $* и $@

Пример 9-7. Противоречия в переменных $* и $@

#!/bin/bash

# Демонстрация противоречивости содержимого внутренних переменных "$*" и "$@",

#+ которая проявляется при изменении порядка заключения параметров в кавычки.

# Демонстрация противоречивости, проявляющейся при изменении

#+ содержимого переменной IFS.

set -- "Первый один" "второй" "третий:один" "" "Пятый: :один"

# Установка аргументов $1, $2, и т.д.

echo

echo 'IFS по-умолчанию, переменная "$*"'

c=0

for i in "$*" # в кавычках

do echo "$((c+=1)): [$i]" # Эта строка остается без изменений во всех циклах.

# Вывод аргументов.

done

echo ---

echo 'IFS по-умолчанию, переменная $*'

c=0

for i in $* # без кавычек

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS по-умолчанию, переменная "$@"'

c=0

for i in "$@"

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS по-умолчанию, переменная $@'

c=0

for i in $@

do echo "$((c+=1)): [$i]"

done

echo ---

IFS=:

echo 'IFS=":", переменная "$*"'

c=0

for i in "$*"

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS=":", переменная $*'

c=0

for i in $*

do echo "$((c+=1)): [$i]"

done

echo ---

var=$*

echo 'IFS=":", переменная "$var" (var=$*)'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS=":", переменная $var (var=$*)'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done

echo ---

var="$*"

echo 'IFS=":", переменная $var (var="$*")'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS=":", переменная "$var" (var="$*")'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS=":", переменная "$@"'

c=0

for i in "$@"

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS=":", переменная $@'

c=0

for i in $@

do echo "$((c+=1)): [$i]"

done

echo ---

var=$@

echo 'IFS=":", переменная $var (var=$@)'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS=":", переменная "$var" (var=$@)'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---

var="$@"

echo 'IFS=":", переменная "$var" (var="$@")'

c=0

for i in "$var"

do echo "$((c+=1)): [$i]"

done

echo ---

echo 'IFS=":", переменная $var (var="$@")'

c=0

for i in $var

do echo "$((c+=1)): [$i]"

done

echo

# Попробуйте запустить этот сценарий под ksh или zsh -y.

exit 0

# Это сценарий написан Stephane Chazelas,

# Незначительные изменения внесены автором документа.


Различия между $@ и $* наблюдаются только тогда, когда они помещаются в двойные кавычки.

Оглавление книги


Генерация: 1.129. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз