2014-01-02 2 views
1
#!/bin/bash 

RESULT=$(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt) 

for i in $(RESULT); 
do 
echo "$i" 
FILENAME="$(dirname $RESULT)" 
done 

У меня проблема с линией FILENAME="$(dirname $RESULT)". Запуск скрипта в режиме отладки (bash -x script-name), то есть Ouput:Bash Script Variable

test.sh: line 9: RESULT: command not found 

По какой-то причине не может принять результат переменной RESULT и сохранить результат dir команды к новой переменной FILENAME. Я не понимаю, почему это происходит.

После многих попыток я нашел решение сохранить полный путь к финалу и финал двум различным переменным. Теперь, я хочу для каждого финала, найти нечувствительный к каждому имени файла. Например, ищет файл image.png, это не имеет значения, если файл image.png

Я бегу сценарий

while read -r name; do 
    echo "$name" 
    FILENAME="$(dirname $name)" 
    BASENAME="$(basename $name)" 
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt) 

, а затем введите команду:

find . $FILENAME -iname $BASENAME 

, но он говорит, что команда FILENAME и BASENAME не найдены.

+0

я нашел, почему выход был командой ИМЯ_ФАЙЛА & BASENAME не найдено. Я добавил кавычки для каждой переменной. Теперь, хотя он имеет полный путь, сохраненный в переменной FILENAME, он говорит, что такого каталога нет. Кажется, что он не может прочитать фактический путь к файлу. – user200913

ответ

2

Синтаксис:

$(RESULT) 

обозначает подстановку команд. Высказывание таким образом попытается выполнить команду RESULT.

Для того, чтобы подставить результат переменной RESULT, скажем:

${RESULT} 

вместо этого.

Кроме того, если команда возвращает более одной строки вывода, этот подход не будет работать.

Вместо этого скажите:

while read -r name; do 
    echo "$name" 
    FILENAME="$(dirname $name)" 
done < <(grep -i -e "\.[a-zA-z]\{3\}$" ./test.txt) 

Синтаксис <(command) называется Process Substitution.

+0

Я сделал изменение, которое вы упомянули. В строке для i в $ (РЕЗУЛЬТАТ); Я сделал изменение для i в $ {RESULT}; Но ничего не изменилось. – user200913

+0

@ user200913 Что значит ничего не изменилось? Вы получаете ту же ошибку? Вы получаете какую-либо другую ошибку? Получаете ли вы неожиданные результаты? – devnull

+0

Я получаю неожиданные результаты – user200913

0

для я в $ (РЕЗУЛЬТАТ) не right.You может использовать $ РЕЗУЛЬТАТ или $ {} РЕЗУЛЬТАТ