La manipolazione della stringa di shell non funziona in Applescript

1

Sto cercando di creare un servizio per tradurre cose che Chrome non traduce automaticamente. Il seguente script funziona quando viene eseguito dalla shell

#!/bin/bash

input='это тест)))' # translates to - this is a test)))
if [[ $(echo "$input") =~ ')' ]]; then 
    input="$(echo "${input//)/}")"
fi
export PATH="/usr/local/bin:$PATH"; /usr/local/bin/trans -e yandex -b :en "$input" 

il risultato: this is a test

Tuttavia quando inserisco questo in un Apice:

set input to "это тест)))"
set output to (do shell script "if [[ $(echo " & quoted form of input & ") =~ ')' ]]; then " & quoted form of input & "=\"$(echo \"${" & quoted form of input & "//)/}\")\"; fi; export PATH=\"/usr/local/bin:$PATH\"; /usr/local/bin/trans -e google -b :en " & quoted form of input & "")

display dialog output as string

Il risultato è ancora this is a test)))

Esegue ancora e traduce la stringa di input. Ma non rimuove il ))) . Non capisco perché l'istruzione if non funzioni nella mia versione di applescript. Sto citando qualcosa di sbagliato?

Questo script utilizza un programma chiamato Translate-Shell che può essere trovato su GitHub o sul sito web dell'autore del programma qui .

    
posta I0_ol 07.09.2016 - 06:35
fonte

1 risposta

2

Non funziona perché, la shell prova a cambiare una 'stringa', non a impostare una variabile.

Il comando come esempio:

do shell script "if [[ $(echo " & quoted form of input & ") =~ ')' ]]; then " & quoted form of input & "=\"$(echo \"${" & quoted form of input & "//)/}\")\"; fi; "

Dopo la concatenazione (guarda gli eventi nell'editor degli script), il comando è:

do shell script "if [[ $(echo 'это тест)))') =~ ')' ]]; then 'это тест)))'=\"$(echo \"${'это тест)))'//)/}\")\"; fi; "

Quindi, metti il contenuto della variabile AppleScript in una variabile nella shell (rimuovo i comandi echo , perché è inutile), come questo:

set input to "это тест)))"
set output to do shell script "input=" & (quoted form of input) & "; if [[  \"$input\" =~ ')' ]]; then input=${input//)/}; fi; export PATH=\"/usr/local/bin:$PATH\"; /usr/local/bin/trans -e google -b :en \"$input\""
display dialog output
    
risposta data 07.09.2016 - 16:28
fonte

Leggi altre domande sui tag