Saya memiliki android build yang perlu saya sesuaikan, pertanyaannya adalah ehre dan tidak di stackoverflow karena masalah saya dengan bash. Saya menulis sebuah skrip:
#!/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
skrip mengira untuk mengambil parameter yang didapatnya, tambahkan --custom-package com.some.package parameter dan simpan sisa params, param pertama ($ 1) adalah tindakan jadi saya harus menyimpannya terlebih dahulu.
Masalahnya adalah dengan spasi pada nama direktori './ my android dir /' misalnya jika saya hanya melewati parameter melalui: param = "$ param $ 1"; kotoran; jika saya memiliki spasi dalam nama itu tidak berfungsi karena param baru tidak lolos (dengan "), jika saya menggunakan kode di atas itu masih tidak berfungsi karena untuk beberapa alasan bash mengabaikan" char dan masih mempertimbangkan spasi di tengah sebagai parameter terpisah! di sini adalah keluaran dari proses: './aapt action "/ Users / bankleumi / 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
Seperti yang Anda lihat di akhir pencetakan bash echo, anggap string "/ Users / bankleumi / some dir" sebagai dua string walaupun ada \ "terintegrasi dalam string! Bagaimana saya bisa membuat bash meninggalkan ruang sendirian? (Saya mencoba bermain dengan IFS dan tidak berhasil ...)
echo $0 | xargs dirname
? Benarkah?