ADB - 使用adb shell从设备获取字符串具有意外和奇怪的行为

时间:2016-05-11 05:13:14

标签: android string shell adb

当我尝试在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 如果我删除文件中的那一行然后添加另一行,它就可以正常工作。

我真的不知道发生了什么...... 有人知道可能会发生什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我猜在folder值的末尾有一个换行符。试试这个:

folder=$(adb shell 'echo -n $EXTERNAL_STORAGE')