Bash 使用read获取用户输入,然后将其分配给变量,会导致变量丢失大小写

Bash 使用read获取用户输入,然后将其分配给变量,会导致变量丢失大小写,bash,shell,capitalization,Bash,Shell,Capitalization,假设我有一个目录,/user/Jack/PROJECT1/tool1 我正在尝试检查shell脚本中是否存在此目录 下面是我正在处理的代码片段: echo -e "Enter complete path: " read verifydir if [ ! -d $verifydir ] then echo -e $verifydir "is not a valid directory" else mydir=$verifydir fi exedir="$mydir/tool1" pgmn

假设我有一个目录,/user/Jack/PROJECT1/tool1

我正在尝试检查shell脚本中是否存在此目录

下面是我正在处理的代码片段:

echo -e "Enter complete path: "
read verifydir
if [ ! -d $verifydir ] 
then
  echo -e $verifydir "is not a valid directory"
else
  mydir=$verifydir
fi
exedir="$mydir/tool1"
pgmname=$exedir"/mytool.exe"
if [ ! -f "$pgmname" ]
then
echo -e $pgmname "not found."
exit -l
fi  

我的问题是,当第一个检查(目录的存在)起作用时,第二个检查(pgmname)在目录名为所有CAP(如PROJECT1)时找不到程序。它正在将PROJECT1转换为PROJECT1。如何修复此问题?

我认为错误在其他地方,即下一行:

if [ ! -f "pgmname" ]
这应该是

if [ ! -f "$pgmname" ]

这一问题解决后,我们可以进一步讨论。

您可以使用
ls

if [[ $(ls $pgmname) ]]

请详细说明你的问题是什么

我解决了这个问题。在前面的代码中,有人设置了typeset-lpgmname


谢谢。

如果这是bash,为什么在执行变量赋值时空格,
mydir=$verdir
应该是
mydir=$verdir
if[!-f“pgmname”]
应该是
if[!-f“$pgmname”]
,pgmname=$exedir”/mytool.exe应该是
pgmname=“$exedir”/mytool.exe,这就是它的实际情况,但是它在我的开发机器上,我没有互联网,所以我不得不在这里重写它,我有使用其他语言的空格的习惯,对不起!我会修复它。请提供准确的源代码。将
set-x
放在脚本的这一部分之前,这样bash将打印它正在执行的命令的等效项;这应该会澄清是什么导致了这个问题。你的代码中没有任何东西会改变资本化。可以在命令行上重新创建效果吗?你在Linux上,是吗?哦,我明白了。。。已经指出了这一点。对不起,这应该是评论,而不是回答。