【问题标题】:ADB - Getting string from the device using adb shell has unexpected and weird behaviorADB - 使用 adb shell 从设备获取字符串有意外和奇怪的行为
【发布时间】: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 如果我在文件中删除该行,然后添加另一行,它工作正常。

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

提前致谢!

【问题讨论】:

    标签: android string shell adb


    【解决方案1】:

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

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

    【讨论】:

    • Uau,谢谢! :) 有效!我完全感到困惑......解决方案非常简单。我只知道这一定是非常愚蠢的事情:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2021-11-13
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多