当我尝试在shell脚本中连接2个字符串时,我遇到了最奇怪的问题。
首先,让我告诉你我想做什么。
我想使用adb
在Android设备的外部存储中创建一个文件夹。为此,我首先需要获取设备的外部存储文件夹。
为此,我使用了这个:
folder=$(adb shell 'echo $EXTERNAL_STORAGE')
它有效,因为如果我尝试运行echo $folder
,结果为/sdcard
,这是正确的外部存储文件夹。
但我想在其中创建一个名为 testResults 的新文件夹。所以,为了获得完整的路径,我尝试了这个:
newDir=$folder/testResults
问题是newDir
变量总是具有值/testResults
,而忽略了folder
的值。
起初,我认为它可能是一个子shell问题,即当我尝试用新的String&#34连接它时,folder
的值不可用;出于某种原因"。但是,它甚至更奇怪......
如果我尝试使用小于folder
(' pop')的字符串来结束folder
,请执行以下操作:
newDir=$folder/pop
这是我运行echo $newDir
时的结果:
/popard
结论:由于某种原因,folder
的值被忽略",当它尝试与其他字符串s
连接时实际上会替换N
的第一个folder
字符(N=length(s)
)。
我认为/s
的开头folder
可能是造成这么多混乱的原因,所以我试过了:
folder=$(adb shell 'echo sdcard')
newDir=$folder/pop
echo $newDir
结果如下:
/poprd
CONSLUSION: adb shell工具中的某些内容使字符串表现异常。
事实上,问题似乎与adb有关,因为如果我尝试这个:
folder=$(echo "/sdcard") #or even folder="/sdcard"
newDir=$folder/testResults
echo $newDir
结果是正确的:/sdcard/testResults
但这甚至更奇怪...... 我尝试使用文件来帮助我,比如:
adb shell 'echo $EXTERNAL_STORAGE' > result.txt
folder=$(cat result.txt)
newDir=$folder/pop
echo $newDir
此处的结果再次为/popard
!
如果我打开文件,并在包含字符串/sdcard
的行中插入某些内容(例如)/sdcardish
,然后执行此操作:
folder=$(cat result.txt)
newDir=$folder/pop
echo $newDir
结果是:/ popardish 如果我删除文件中的那一行然后添加另一行,它就可以正常工作。
我真的不知道发生了什么...... 有人知道可能会发生什么吗?
提前致谢!
答案 0 :(得分:1)
我猜在folder
值的末尾有一个换行符。试试这个:
folder=$(adb shell 'echo -n $EXTERNAL_STORAGE')