Еще одна проблема с примером кода, вы обычно хотите использовать двойные кавычки на любом из итераторов , поскольку вы используете их в цикле for.
Ваш код:
for javaFile in *.java ;
{
echo "The file $javaFile has : " >> ~/Desktop/externalServers.txt
grep -E '^[^/]{2}.*http' $javaFile >> ~/Desktop/externalServers.txt
grep -E '^[^/]{2}.*ftp' $javaFile >> ~/Desktop/externalServers.txt
Должен быть:
for javaFile in *.java ; do
echo "The file $javaFile has : " >> ~/Desktop/externalServers.txt
grep -E '^[^/]{2}.*http' "$javaFile" >> ~/Desktop/externalServers.txt
grep -E '^[^/]{2}.*ftp' "$javaFile" >> ~/Desktop/externalServers.txt
Поскольку вы не указали переменную в:
echo $A
он подлежит разделению и объединению. Первый шаг — расширение содержимого переменной:
echo a $'\n' b $'\n' c
--, где биты $'\n'
представляют фактические символы новой строки.
Затем различные части разбиваются на $IFS, в результате чего:
echo a b c
Затем, поскольку нет подстановочных знаков для создания дополнительных имен файлов, строки передаются в echo
.
Когда вы заключаете переменную в кавычки с помощью echo "$A"
, вы запрещаете разделение и подстановку.
См. изменение самостоятельно, если вы модифицируете IFS:
oIFS=$IFS
IFS=
echo $A
IFS=$oIFS