Хронологическим порядком:
echo "$VERSION" | tr -d .
echo "$VERSION" | sed 's/\.//g'
echo $VERSION:as/.//
set -f
IFS=.
set -- $VERSION
IFS=
echo "$*"
ash
при создании с ASH_BASH_COMPAT
)echo "${VERSION//.}"
echo $VERSION:gs/./
Вы можете заключить строку в $ ''
, чтобы разрешить интерпретацию в ней управляющих последовательностей (в данном случае, чтобы разрешить интерпретацию of \ r
):
rm $'file\rwith_carriage_return'
% touch $'file\rwith_carriage_return'
% ls
file?with_carriage_return
% rm $'file\rwith_carriage_return'
% ls
%
Обычно, когда я попадаю в такие ситуации, я делаю следующее ..
Пример: Предположим, у меня есть файл 'xxx \ nyyy'
Я знаю, что он начинается с 'xxx' .....
Я использую команду:
rm -i xxx*
И удаляю ПРАВЫЙ файл при появлении запроса, хотите ли вы удалить файл или нет.
Из нескольких доступных методов один состоит в том, чтобы найти номер inode и затем выкинуть его.
$ mkdir -p ~/tmp/asdf
$ cd !$
cd ~/tmp/asdf
$ touch `head -c 32 /dev/random` # newlines are boring
$ find . -type f -ls
5636303 0 -rw-r--r-- ...
$ find . -maxdepth 1 -inum 5636303 -exec rm '{}' \;
Я удалил с помощью rm *.*
, однако я все еще хотел бы знать, почему rm blahblah\r\n.txt
и rm blahblah*.txt
не работают...
Должно быть возможно удалить файл, если вы выделите имя файла:
rm 'bla\n.txt'
Но если это не сработает, попробуйте удалить по номеру inode:
ls -i bla*
1234 bla\n.txt
find . -inum 1234
#make sure the right file and only the right file is returned then
find . -inum 1234 -delete