私はしばらくのプライベートbashスクリプトの問題に苦しんでおり、オンラインで見つけた提案を使用して多くの幸運を得ることができませんでした。私はこの質問が他の多くの質問とほぼ同じように見えることを知っていますが、その質問をすべて見た後もまだ喜びはありません。
私の考えに最適なアプローチは、私が現在持っているもののリストを作成し、そこから作業することです。
したがって、私のスクリプトの関連部分は次のようになります。
#!/bin/bash
SOURCE_FILE="$1"
cat "$SOURCE_FILE" | while read FOLDER
do
...
FOLDER_RULE=$(echo ${FOLDER} | grep -oP '\[.*\]')
FOLDER_NAME=$(echo ${FOLDER} | grep -oP '.+(?=\[.*\]')
# these output absolutely nothing:
echo FOLDER_RULE is "$FOLDER_RULE"
echo FOLDER_NAME is "$FOLDER_NAME"
...
done
参照$SOURCE_FILE
は、実行時にスクリプトに渡す文字列のリストを含む単純なテキストファイルを指します。このファイルのいくつかのダミーデータは次のとおりです。
Folder One [ALL]
Folder Two [LATEST]
Folder Three [FIRST]
Folder Four
$FOLDER
問題なくスクリプトの内容をエコーできます。$(echo ... | grep ...)
これらの2行は端末で直接実行すると完全に機能しますが、私のbashファイルでは何も得られません。
grep
さまざまな方法でコマンドを構造化し、変数を${...}
sums として参照し"$..."
、echo
キャプチャしようとしている出力を持つコマンドの出力を取得しようとしましたが、まだ何も得られませんでした。
私が何か簡単なものを見逃していることは確かです。しかし、私が行った検索のどれもこの問題を解決するのに役立ちませんでした。誰かが私がここで何が間違っているのかを理解するのに役立ちますか?
答え1
結局のところ、問題は私の正規表現にあります。その行を傷つけるする末尾のインクルードは[something]
期待どおりに変数に値を割り当てますが、末尾にその特定の文字列がない行は両方の変数を空白のままにします。少なくとも正規表現の側面を修正することができます。
愚かな質問についてお詫び申し上げます。お時間をいただきありがとうございます。 :)