Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

bashで否定先読みを使いたいときの回避策

$
0
0

やりたいこと

bashのif文で、文字列の最初にドットが含まれない正規表現を条件式として使いたかった。
ファイルのリストから隠しファイル (ドットファイル) を除外したかったからである。

カレントディレクトリの状況↓

ls

.DS_Store
myfile.txt

ハマったところ

bashでは前方一致はできるが、否定先読み (前方一致の否定) は使えない1

前方一致:

file_name=$(ls)if[[$file_name=~ ^(\.).*$ ]];then echo$file_name;fi;

.DS_Store

否定先読み:

if[[$file_name=~ ^(?!(/.)).*$ ]];then echo$file_name;fi;

bash: !: event not found

解決案

elseを使う方法もあるが、if内で処理を行わないので冗長になってしまう。
そこで、まずif文の条件式を前方一致にしておき、その条件式全体を!で否定することで、擬似的に否定先読みを行った。

否定先読みの回避策:

if[[!$file_name=~ ^\..*$ ]];then echo$file_name;fi;

myfile.txt


Viewing all articles
Browse latest Browse all 2722

Trending Articles