Исключить $ 0 при отображении аргументов команды в цикле (BASH)? - PullRequest
1 голос
/ 20 января 2010

Я пытаюсь использовать цикл for для получения имен файлов, заканчивающихся на .cpp.

Код:

for cppfile in ls *.cpp ; do 
echo $cppfile
done

Я планирую сделать больше, чем просто повторить аргумент, но сейчас он работает нормально, за исключением того, что я получу команду в качестве первого аргумента. Есть ли простой способ избежать этого, или мне придется сделать цикл другим способом?

Ответы [ 3 ]

5 голосов
/ 20 января 2010

Вы не выполняете ls *.cpp там. То, что вы делаете, это итерация по «ls», за которой следуют все файлы, которые соответствуют «* .cpp». Удаление блуждающего "ls" исправит это.

3 голосов
/ 20 января 2010

Как сказал Игнасио, вы не выполняете ls, ваш список состоит из ls и *.cpp, который распространяется на все файлы, заканчивающиеся на .cpp.Если вы хотите использовать вывод команды в виде списка, заключите его в обратные черты:

for cppfile in `ls *.cpp`
do
    echo $cppfile
done

В bash вы можете использовать $(...) вместо обратных черт:

for cppfile in $(ls *.cpp)
do
    echo $cppfile
done

$(...) имеет преимущество, заключающееся в том, что оно лучше вкладывается, но тэги более переносимы.

0 голосов
/ 20 января 2010
find ./ -name "*.cpp" | while read cppfile; do
  echo $cppfile
  #...
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...