Основные каталоги со списком сценариев ([: Discover: неожиданный оператор)

Я столкнулся с проблемой запуска каталога с базовым сценарием.

for item in *
do
   if [ -d $item ]
   then
      echo $item
   fi
done

Результат:

  1. перечисляет все системные папки
  2. возвращает ошибку: for.sh: 4: [: Discover: неожиданный оператор
  3. перечисляет все мои папки, имена которых начинаются со строчной буквы

Я думаю, что -d находит какую-то проблему с исходной строчной буквой? Может кто-нибудь объяснить, почему это происходит? Заранее большое спасибо.

1
задан 31 July 2013 в 08:57

2 ответа

Некоторые каталоги / файлы могут содержать пробелы в своих именах, это может привести к получаемой вами ошибке. Поэтому используйте кавычки:

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done

, если вы хотите, чтобы они были отсортированы в алфавитном порядке, используйте

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done | sort

. В качестве примера проблемы предположим, что файл называется My File. Если вы не используете кавычки, вы получите (после расширения bash)

if [ -d My File ]

, так что это похоже на «Тест: My каталог? Do File», но File нет действительный оператор test, таким образом, ошибка.

0
ответ дан 31 July 2013 в 08:57

Следующее повторяет все каталоги в текущем каталоге (но не пунктирные, например .git)

#!/bin/bash

find . -maxdepth 1 -mindepth 1 -type d | while read Directory; do
    echo "$Directory";
done
0
ответ дан 31 July 2013 в 08:57

Другие вопросы по тегам:

Похожие вопросы: