У меня есть сборка Android, мне нужно настроить, вопрос, а не в stackoverflow, потому что моя проблема была с Bash. Я написал сценарий:
#!/bin/bash -xv
params=$@
if [ "$#" -ge "2" ]; then
params=$1
shift
params="$params --custom-package com.some.package"
while [ "$#" -gt "0" ]; do
temp=$1
echo $1 | grep ' ' > /dev/null
if [ "$?" -eq "0" ]; then
temp=\"$1\"
fi
params="$params $temp"
shift
done
fi
path=$(echo $0|xargs dirname)
echo $params
$path/aapt-orig $params
Предполагается, что скрипт принимает параметры, которые он получил, добавляет параметр --custom-package com.some.package и сохраняет остальные параметры. Первый ($ 1) параметр - это действие, поэтому мне нужно сохранить его первым.
Проблема с пробелами в именах каталогов, например, «./my android dir/». если я просто передам параметр через: param = "$ param $ 1"; дерьмо; если в имени есть пробелы, это не работает, потому что новый параметр не экранирован (с помощью "), если я использую приведенный выше код, он все равно не работает, потому что по какой-то причине bash игнорирует символ" char "и все еще учитывает пробел в середине как отдельный параметр! Вот результат выполнения: «./aapt action» /Users /bankleumi /some dir/«another_param»
'[' 0 -eq 0 ']'
+ temp='"/Users/bankleumi/some dir/"'
+ params='action --custom-package com.leumi.leumiwallet "/Users/bankleumi/some dir/"'
+ shift
+ '[' 1 -gt 0 ']'
+ temp=another_param
+ echo another_param
+ grep ' '
+ '[' 1 -eq 0 ']'
+ params='action --custom-package com.leumi.leumiwallet "/Users/bankleumi/some dir/" another_param'
+ shift
+ '[' 0 -gt 0 ']'
path=$(echo $0|xargs dirname)
echo $0|xargs dirname
++ echo ./aapt
++ xargs dirname
+ path=.
echo $params
+ echo action --custom-package com.leumi.leumiwallet '"/Users/bankleumi/some' 'dir/"' another_param
action --custom-package com.leumi.leumiwallet "/Users/bankleumi/some dir/" another_param
$path/aapt-orig $params
+ ./aapt-orig action --custom-package com.leumi.leumiwallet '"/Users/bankleumi/some' 'dir/"' another_param
Как вы можете видеть в конце печати echo bash, рассматривайте строку "/Users/bankleumi/some dir" как две строки, даже если в строку встроено \"! Как я могу заставить Баш оставить пространство в покое? (Я пытался играть с IFS, и это тоже не сработало ...)