Android ADB-使用ADB shell从设备获取字符串有意外和奇怪的行为
当我试图在shell脚本中concat2字符串时,我遇到了最奇怪的问题 首先,让我告诉你我想做什么。 我想使用Android ADB-使用ADB shell从设备获取字符串有意外和奇怪的行为,android,string,shell,adb,Android,String,Shell,Adb,当我试图在shell脚本中concat2字符串时,我遇到了最奇怪的问题 首先,让我告诉你我想做什么。 我想使用adb在Android设备的外部存储器中创建一个文件夹。为此,我首先需要获取设备的外部存储文件夹 为此,我使用了以下方法: folder=$(adb shell 'echo $EXTERNAL_STORAGE') 它可以工作,因为如果我尝试运行echo$folder,结果是/sdcard,这是正确的外部存储文件夹 但我想在其中创建一个新文件夹,名为testResults。因此,为了获得
adb
在Android设备的外部存储器中创建一个文件夹。为此,我首先需要获取设备的外部存储文件夹
为此,我使用了以下方法:
folder=$(adb shell 'echo $EXTERNAL_STORAGE')
它可以工作,因为如果我尝试运行echo$folder
,结果是/sdcard
,这是正确的外部存储文件夹
但我想在其中创建一个新文件夹,名为testResults。因此,为了获得完整路径,我尝试了以下方法:
newDir=$folder/testResults
folder=$(adb shell 'echo sdcard')
newDir=$folder/pop
echo $newDir
问题是newDir
变量始终具有值/testResults
,忽略了文件夹的值
起初,我认为这可能是一个子shell问题,即当我试图用新字符串“出于某种原因”连接它时,文件夹
的值不可用。但后来,它变得更奇怪了
如果我尝试使用比文件夹
更小的字符串来压缩文件夹
('pop',例如),如下所示:
newDir=$folder/pop
adb shell 'echo $EXTERNAL_STORAGE' > result.txt
folder=$(cat result.txt)
newDir=$folder/pop
echo $newDir
这是我运行echo$newDir时的结果:
/popard
结论:由于某种原因,文件夹
的值被“忽略”,当它试图与其他字符串
s合并时,它将实际替换文件夹
的第一个N
字符(使用N=长度
)
我想可能是/s
文件夹开始时的/s
是造成如此多混乱的原因,所以我尝试了以下方法:
newDir=$folder/testResults
folder=$(adb shell 'echo sdcard')
newDir=$folder/pop
echo $newDir
结果是:
/poprd
结论:adb shell工具中的某些东西使字符串行为异常
事实上,问题似乎与亚洲开发银行有关,因为如果我尝试以下方法:
folder=$(echo "/sdcard") #or even folder="/sdcard"
newDir=$folder/testResults
echo $newDir
结果正确:/sdcard/testResults
但这变得更奇怪了。。。
我尝试使用文件来帮助我,如下所示:
newDir=$folder/pop
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
如果我删除文件中的那一行,然后添加另一行,它就可以正常工作
我真的不知道发生了什么。。。
有人知道可能会发生什么吗
提前谢谢 我猜
文件夹
值的末尾有一个换行符。试试这个:
folder=$(adb shell 'echo -n $EXTERNAL_STORAGE')
Uau,谢谢!:)成功了!我完全迷惑不解。。。解决方案非常简单。我只知道这一定是件很愚蠢的事:P