在bash中变量末尾回显asterix

在bash中变量末尾回显asterix,bash,Bash,我有以下脚本 #!/bin/bash PHOTOS_DIR=$1 PHOTOS_LIST=$2 while read line do echo "line: ${line}" pattern="*`echo \"$line\" | tr ' ' '*'`*" echo "pattern: ${pattern}" done <$PHOTOS_LIST 我尝试转义最后一个asterix字符,但效果不太好 line: 20121224-100

我有以下脚本

#!/bin/bash

PHOTOS_DIR=$1
PHOTOS_LIST=$2

while read line           
do
    echo "line: ${line}"
    pattern="*`echo \"$line\" | tr ' ' '*'`*"
    echo "pattern: ${pattern}"
done <$PHOTOS_LIST
我尝试转义最后一个asterix字符,但效果不太好

line: 20121224-100 5777
\*ttern: *20121224-100*5777
line: 20121224-100 5778
\*ttern: *20121224-100*5778
如果我在bash控制台中尝试类似的方法,效果会很好:

$ line='a b'
$ pattern="*`echo \"$line\" | tr ' ' '*'`*"
$ echo "pattern: ${pattern}"
pattern: *a*b*
脚本中有什么错误


我做了另一个测试。以下方法效果良好

for line in "20121224-100 5777" "20121224-100 5778"
do
    echo -e "line: ${line}"
    pattern="*`echo \"$line\" | tr ' ' '*'`*"
    echo -e "pattern: ${pattern}"
done

读取行时,此
循环有问题。但是什么呢?

您的输入文件
$PHOTOS\u LIST
有CRLF行结尾。
运行
dos2unix$PHOTOS\u LIST
以永久更改文件

或者,尝试以下方法:

#!/bin/bash

PHOTOS_DIR=$1
PHOTOS_LIST=$2

while read line           
do
    echo "line: ${line}"
    pattern="*`echo \"$line\" | tr ' ' '*'`*"
    echo "pattern: ${pattern}"
done < <(tr -d '\n' < $PHOTOS_LIST)
#/bin/bash
照片目录=$1
照片列表=$2
读行时
做
回显“行:${line}”
pattern=“*`echo\”$line\“|tr''*'`
回显“模式:${pattern}”

完成<您的输入文件
$PHOTOS\u LIST
有CRLF行结尾。
运行
dos2unix$PHOTOS\u LIST
以永久更改文件

或者,尝试以下方法:

#!/bin/bash

PHOTOS_DIR=$1
PHOTOS_LIST=$2

while read line           
do
    echo "line: ${line}"
    pattern="*`echo \"$line\" | tr ' ' '*'`*"
    echo "pattern: ${pattern}"
done < <(tr -d '\n' < $PHOTOS_LIST)
#/bin/bash
照片目录=$1
照片列表=$2
读行时
做
回显“行:${line}”
pattern=“*`echo\”$line\“|tr''*'`
回显“模式:${pattern}”

完成<请看一看:好工具。我以前不知道。我修复了错误,但没有帮助。请看一看:很好的工具。我以前不知道。我修正了错误,但没用。你说得对!事实上我现在自己找到的。尊敬的您,您可以通过查看输出来了解它!你是对的!事实上我现在自己找到的。尊敬的您,您可以通过查看输出来了解它!