При попытке запустить следующую функцию - Bash неожиданно расширяет мою переменную - тем самым не давая мне получить ожидаемый результат.
Это сводится к тому, как bash имеет дело с "*.h"
, который я передаю в функцию.
Вот функция, которую я вызываю:
link_files_of_type_from_directory "*.h" ./..
И где я ожидал бы, что эта переменная будет оставаться таким же образом в в какой-то момент, когда он достигает части echo $command_to_run;
моего сценария Bash ... эта переменная расширилась до ...
MyHeader1.h MyHeader2.h MyHeader3.h
и т. д.
Что Я хочу, чтобы Bash не расширял мои файлы, чтобы мой код выполнял следующее:
find ./.. -type f -name '*.h'
Вместо
find ./.. -type f -name MyHeader1.h MyHeader2.h MyHeader3.h
Это код:
function link_files_of_type_from_directory {
local file_type=$1;
local directory_to_link=$2;
echo "File type $file_type";
echo "Directory to link $directory_to_link";
command="find $directory_to_link -type f -name $file_type";
echo $command;
#for i in $(find $directory_to_link -type f -name $file_type);
for i in $command;
do
echo $i;
if test -e $(basename $i); then
echo $i exists;
else
echo Linking: $i;
ln -s $i;
fi
done;
}
Как я могу предотвратить расширение, чтобы Bash выполнял поиск файлов, заканчивающихся на *.h
, в моем каталоге, который я хочу передать?
ОБНОВЛЕНИЕ 1:
Итак, я обновил вызов, чтобы он был
link_files_of_type_from_directory "'*.h'" ..
И теперь функция собирает строку команды для оценки Вот так:
mmd="find $directory_to_link -type f -name $file_type";
Когда я повторяю это - это правильно:)
find .. -type f -name '*.h'
Но я не могу заставить команду find
действительно работать. Вот ошибки / ошибки, которые я получаю, пытаясь правильно собрать for
l oop:
# for i in $mmd; # LOOPS THROUGH STRINGS IN COMMAND
# for i in '$(mdd)'; # RUNS MMD LITERALLY
# for i in ${!mmd}; # Errors out with: INVALID VARIABLE NAME — find .. -type f -name '*.h':
Хотелось бы помочь с этой частью - даже если это другой вопрос:)