如何测试破折号文件名中的字符(或字符串)
How to test for a character (or string) in a filename in dash
我有一个字符串(实际上是一个文件名),我想测试它们是否包含一个字符:
NEEDLE="-"
for file in mydirectory/*
do
if [NEEDLE IS FOUND IN STRING]
then
# do something
else
# do something else
fi
done
基本上这与 String contains in Bash 是同一个问题,除了破折号而不是 bash(理想情况下是 shell 中立的,无论如何破折号代码通常都是这种情况)
破折号中不存在 [[ 运算符,因此该问题的答案无效。
您可以在 for loop
:
中使用 grep -q
NEEDLE="-"
for file in mydirectory/*; do
if grep -q "$NEEDLE" "$file"; then
echo "do something"
else
echo "do something else"
fi
done
使用 case
语句,无需生成外部程序:
NEEDLE="-"
for file in mydirectory/*; do
case "$file" in
*"$NEEDLE"*) echo "do something" ;;
*) echo "do something else" ;;
esac
done
我有一个字符串(实际上是一个文件名),我想测试它们是否包含一个字符:
NEEDLE="-"
for file in mydirectory/*
do
if [NEEDLE IS FOUND IN STRING]
then
# do something
else
# do something else
fi
done
基本上这与 String contains in Bash 是同一个问题,除了破折号而不是 bash(理想情况下是 shell 中立的,无论如何破折号代码通常都是这种情况)
破折号中不存在 [[ 运算符,因此该问题的答案无效。
您可以在 for loop
:
grep -q
NEEDLE="-"
for file in mydirectory/*; do
if grep -q "$NEEDLE" "$file"; then
echo "do something"
else
echo "do something else"
fi
done
使用 case
语句,无需生成外部程序:
NEEDLE="-"
for file in mydirectory/*; do
case "$file" in
*"$NEEDLE"*) echo "do something" ;;
*) echo "do something else" ;;
esac
done