【发布时间】:2016-05-11 05:13:14
【问题描述】:
当我尝试在 shell 脚本中连接 2 个字符串时遇到了最奇怪的问题。
首先,让我告诉你我想做什么。
我想使用adb 在Android 设备的外部存储中创建一个文件夹。为此,我首先需要获取设备的外部存储文件夹。
为此,我使用了这个:
folder=$(adb shell 'echo $EXTERNAL_STORAGE')
它有效,因为如果我尝试运行echo $folder,结果是/sdcard,这是正确的外部存储文件夹。
但我想在其中创建一个名为 testResults 的新文件夹。所以,为了获得完整的路径,我尝试了这个:
newDir=$folder/testResults
问题在于newDir 变量总是具有/testResults 的值,而忽略了folder 的值。
起初,我认为这可能是一个子shell问题,即当我“出于某种原因”尝试将它与新字符串连接时,folder 的值不可用。但后来,它变得更奇怪了......
如果我尝试将folder 与小于folder 的字符串(例如'pop')连接起来,如下所示:
newDir=$folder/pop
这是我运行echo $newDir时的结果:
/popard
结论:由于某种原因,folder 的值被“忽略”,当它尝试与其他字符串 s 连接时,它实际上会替换第一个 N 字符的folder(与N=length(s))。
我认为可能folder开头的/s是造成如此多混乱的原因,所以我尝试了这个:
folder=$(adb shell 'echo sdcard')
newDir=$folder/pop
echo $newDir
结果是这样的:
/poprd
结论: 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 如果我在文件中删除该行,然后添加另一行,它工作正常。
我真的不知道发生了什么... 有人知道会发生什么吗?
提前致谢!
【问题讨论】: