Intereting Posts
dscverify: nanomsg_0.4 ~ beta + dfsg-3.dsc ошибка проверки подписи Директива Alias, вероятно, никогда не будет соответствовать, поскольку она перекрывает предыдущий псевдоним Жизнь с пустым: плагины (так без вспышки) Debian: обновления пакетов в стабильном дистрибутиве tmux не может видеть вложенную сессию Выполнить команду в другом терминале Возможно ли возобновить источник .bashrc и .zshrc И удалить функции один раз внутри них без перезапуска? Диспетчер окон и среда рабочего стола для сенсорных экранов В котором поток блокирует команды выдачи драйверов для блокировки устройства? Перемещение по вложенным папкам с использованием сценария bash Есть ли проблема, если я добавляю несуществующий путь к переменной среды PATH? Как настроить для аутентификационного прокси-сервера Существуют ли эмуляторы USB для Linux? xmobar не появляется поверх стека окон при запуске xmonad Сенсорная панель – Подождите, пока левый клик начнет работать

Неожиданный результат при использовании аргументов командной строки для поиска файла с символом

Я пытаюсь написать сценарий, который принимает два аргумента командной строки, например, имя каталога, другое – символ (любой символ может быть $, £, ^, * и т. Д.). Затем он должен проверить, имеет ли каталог имя файла, который имеет этот символ, и если он не добавляет символ в каталог.

Поэтому, если я искал каталог с именем testDir качестве первого аргумента и имел * в качестве второго аргумента, он проверял бы файлы в этом каталоге, чтобы увидеть, есть ли этот символ в файле, и если бы не был вызван каталог testDir* .

Вот немного кода, который я пытаюсь разработать.

 a1=$1 symbol=$(ls $a1 | grep $2) if [ "$symbol" != "" ] then echo "file has Symbol" else echo "The symbol was added to directory" mv $a1 $1$2 fi 

Казалось, что он работает с символом @ поэтому я считаю, что это было сделано специальными символами. Есть ли способ попробовать специальные символы, а также работать с неспецифическими символами?

Во-первых, никогда не рекомендуется анализировать вывод ls при поиске имен файлов. Это сломается на любых странных персонажах, включая простое пространство. Лучше всего использовать оболочку globbing или find вместо нее .

Следующая проблема заключается в том, что вы не указываете переменные, что означает, что специальные символы разворачиваются до запуска команды mv . Рабочим примером вашего скрипта будет:

 #!/usr/bin/env bash if find "$1" -print0 | grep -z "$2" >/dev/null then echo "file has Symbol" else echo "The symbol was added to directory" echo mv "$1" "$1$2" fi 

ПРЕДУПРЕЖДЕНИЕ : Я понятия не имею, почему вы хотели бы это сделать. Это было бы. например, попытайтесь переместить каталог в его подкаталог, и это не удастся. Я подозреваю, что проблема XY здесь и предложит вам изменить свой вопрос, чтобы объяснить, что вы на самом деле пытаетесь сделать.