ОП не вернулся, чтобы уточнить. Откладывать сейчас. Спасибо за Ваши советы. Это первый раз, когда я разместил вопрос на stackovflow. я бегу `в awk -ВС=$счет студентов -ВГ=$gradename '$1 == г && $3 == х {печати $0}' студент > student2 ` это работает прекрасно!!! Большинство дистрибутивов имеют команду или последовательность команд, чтобы выявить и скачать исходный код команды. Это зависит от дистрибутива, и вы не сказать, какой из них вы используете. ОК, похоже, у нас есть секции ядра упс, ты можешь копировать из "Упс:" на "конец следа", может, как редактировать исходный вопрос, так как он довольно большой + форматирование. Поскольку заголовок ваш вопрос является "многомерные массивы оболочки программирования и скриптов", делает решение требует использования многомерных массивов?

Вопрос в том, что ~-расширение не выполняется по переменной расширения (когда вы ссылаетесь на что $каталог исходного кода без кавычек), ни внутри двойных кавычек (при назначении, что каталог исходного кода переменной).

В уходящем $каталог исходного кода без кавычек, вы вызываете сплит+Глоб оператора. То есть строку, которая хранится в том, что скалярное $каталог исходного кода переменной (~/ПИ/страницы tutos/* ~/скрипты/*) сначала расщепляется по $МФС (пустые по умолчанию), а затем каждое слово подвергается универсализации, то есть рассматриваются как шаблоны, которые расширяют список соответствующих файлов.

Потому что ~ не расширяется к вашей домашней директории есть, что ~ это просто относиться как к любому другому персонажу, поэтому он просто ищет файлы в ~/ПИ/страницы tutos каталог, где ~ будет директории в текущей директории, которая в вашем случае не существует.

Лучше было бы сделать $каталог исходного кода массива и имеют Глобс расширили в момент уступки:

Каталог исходного кода=(~/ПИ/страницы tutos/* ~/скрипты/*) # ~ и комки расширили в этот момент
деготь cvpzf "именем" "${каталог исходного кода[@]}"

Обратите внимание, что применение сплит+Глоб оператора на $именем не имеет смысла, поэтому мы убрали его процитировать именем.

Обратите внимание, что если ~/ПИ/страницы tutos/* не соответствует, она будет оставлена как есть, так что вы все еще получаете ошибку из смолы. Чтобы избежать этого, вы могли бы сделать:

shopt -с nullglob # удалить несоответствующие Глобс
Каталог исходного кода=(~/ПИ/страницы tutos/* ~/скрипты/*)
если ((${#каталог исходного кода[@]} != 0)); тогда
 деготь cvpzf "именем" "${каталог исходного кода[@]}"
интернет

Вы можете быть уговорены для того чтобы сделать:

Каталог исходного кода="$Home/ПИ/страницы tutos/* $главная/сценарии/*"
деготь cvpzf "именем" $каталог исходного кода

В качестве переменных (таких как $дома) расширяются в двойные кавычки, но я бы не советовал этого делать так что бы не работать должным образом, если $дома содержит Глоб символы или символы $МФС.

~ы расширяются в переменной назначения, когда он не цитирует, А когда в начале или следующее : (Это значит, что он работает в задания переменных как в$Path, $переменная LD_LIBRARY_PATH... например путь=~/ОГРН:~на/sbin). Поэтому вы можете быть уговорены для того чтобы сделать:

Каталог исходного кода=~/ПИ/страницы tutos/*:~/скрипты/* # ~ (не комки) расширил здесь
ИФС=:
деготь cvpzf "именем" $каталог исходного кода

Но это то же самое, что не работать должным образом, если дом за$ содержит $МФС персонажей (на этот раз :, так что очень маловероятно, поскольку файл/etc/passwd и что определяет ваш домашний каталог, разделенных двоеточием стол) или Глоб персонажей.