С-подібні рядки та $ 'string'
Крім усього іншого, можна використовувати $'...'
тип цитування, щоб використовувати символи зворотної косої лінії ANSI-C, такі як \n
і \t
, включаючи ті, про які ви згадали. З bash 4.3 керівництво:
Слова форми $ 'string "обробляються спеціально. Слово розширюється до рядка, а символи, що ухиляються від косої риски, замінюються відповідно до стандарту ANSI C.
Це особливо корисно для файлів, що містять нові рядки, вкладки, коли ви пишете складні рядки-програмі, де потрібно скористатися різними способами розрізнення одинарних та подвійних лапок, коли самі назви файлів містять мішмаш з подвійною / подвійною цитатами тощо.
Наприклад, створення та перелік таких файлів:
$ touch a$'*'b c$'\n'd
$ ls a$'*'b c$'\n'd
a*b c?d
Ви можете використовувати знаки шестигранних символів, такі як:
$ touch 'file(name'
$ ls file$'\x28'name
file(name
printf
Така ж ідея, як і раніше - скористайтеся символами втечі:
$ ls "$(printf "file\x28name")"
file(name
$ echo "Hello World" > c$'\n'd
$ cat "$(printf "c\nd")"
Hello World
Використовуйте вставки:
Кожен файл або каталог має спеціальну структуру даних, пов'язану з ним, називається inode, на яку посилається певне десяткове число. Таким чином, ви можете використовувати це для опосередкованого пошуку файлу з певним inode за допомогою find
команди та робити щось з ним:
$ echo "This is a test" > file$'('name1
$ ls -i
5898996 file(name1 5898997 file?name2
$ find -type f -inum "5898996" -exec cat {} \;
This is a test
Уникайте роботи з окремими файлами, коли ви можете використовувати глобус
Коли вам не доведеться мати справу з окремими файлами, просто скористайтеся *
глобальним символом в оболонці та цитуйте змінні, передаючи їх іншим командам. Значно полегшує роботу зі складними іменами:
$ for f in ./*; do echo "$f" ; done
file name2
file(name1
Зверніть увагу на використання ./
захисного захисту від імен файлів, які можуть містити провідні -
в них.