我正在编写一个小脚本,需要读取一些字符串:
#!/bin/bash
echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag
dicomDump() {
arg1=$1
cd ~/export/"$1"
dcmdump *.dcm > dcmResults.txt
}
tagFinder() {
arg1=$1
arg2=$2
for i in $(cat ~/export/"$1"/dcmResults.txt); do grep "$2" | >> tagResults.txt
break
done;
}
dicomDump "$uid"
#tagFinder "$uid" "$dicomTag"
我注意到的第一件事是,在 dicomDump() 函数中,它不会更改目录。当我陷入ls
代码时,它仍然在 中pwd
,我注意到的另一件事是我正在尝试使用 dcmdump (它符号链接到我的服务器中的程序,其中 * 是通配符)。每次我运行脚本时都会得到:
E: dcmdump: No such file or directory: reading file: *.dcm
谁能告诉我为什么脚本没有按应有的方式更改目录以及如何让它运行 dcmdump 程序?
答案1
你用read
错了。
echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag
应该
echo "Enter SUID: "
read uid
echo "Enter Tag Number: "
read dicomTag
事实上,您read
使用参数“$uid”进行调用,这会将变量“uid”扩展为空字符串(因为尚未设置),然后 shell 从参数列表中删除该read
单词它是空的并且没有被引用。这会导致您调用read
未给出变量名称的形式,而将响应存储在$REPLY
其中。