Есть ли какие-либо решения этой проблемы командного кода? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть некоторые шелл-коды, похожие на:

while read line; do echo $line; done < (ls -la $path)

, но появляется ошибка " -bash: синтаксическая ошибка рядом с неожиданным токеном` (' ", которую я не могу исправитьЯ знаю, что конвейерная команда тоже может это делать. Мне нравится

ls -la $path | while read line; do echo $line; done

, но на самом деле я хочу сделать что-то в циклах, например изменить глобальное значение

while read line; $((count++)); done 

итрубопровод не работал.

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

Правильный синтаксис для подстановки процесса :

while read line; do echo $line; done < <(ls -la $path)

Но в любом случае, делать это таким образом не очень хорошая идея , используйте дляцикл вместо:

for fname in "$path"/* "$path"/.*; do
  echo "$fname"
done

И если вам нужно получить информацию о файле в цикле, используйте stat .

2 голосов
/ 08 мая 2019

Подумайте об агрессивном избегании ls в сценариях, поскольку его вывод может быть непредсказуемым.

В качестве альтернативы рассмотрим следующее:

count=0
for file in "$path"/.* "$path"/*; do
  [[ -e $file ]] && ((count++))
done

Подробнее о том, почему ls так нежелательно, см. https://mywiki.wooledge.org/ParsingLs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...