我已经在个人 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 ...)
当我直接在终端中运行它们时,这两行工作完美,但在我的 bash 文件中我什么也得不到。
我尝试grep
以不同的方式构造命令,将变量引用为${...}
和"$..."
,甚至简单地echo
获取我试图捕获其输出的命令的输出,但我仍然一无所获。
很确定我错过了一些简单的事情,但我所做的搜索都没有帮助我解决这个问题。请有人帮助我理解我在这里做错了什么?
答案1
所以,毕竟,问题出在我的正则表达式上。刮掉那些线做末尾的contains[something]
按预期为变量赋值,而末尾没有该特定字符串的行将两个变量留空。至少我可以修复正则表达式方面。
我对这个愚蠢的问题表示歉意,并非常感谢评论者试图提供帮助。我非常感谢您的宝贵时间。 :)