osascriptに変数を渡すときはon run argvを使う
macOSの osascript でシェル変数を文字列展開すると、ダブルクォートを含む値でAppleScriptの構文が壊れる。
# NG: 変数にダブルクォートが含まれると構文エラー
TITLE='He said "hello"'
osascript -e "display notification \"$TITLE\""
on run argv を使えば引数として安全に渡せる。
# OK: 引数として渡すので展開の問題がない
osascript - "$TITLE" "$MESSAGE" <<'EOF'
on run argv
display notification (item 2 of argv) with title (item 1 of argv)
end run
EOF
ポイント:
- ヒアドキュメントは
<<'EOF'(シングルクォート)にして、シェルの変数展開を防ぐ on run argvでAppleScript側の引数として受け取る- 通知以外(
do shell script等)でも同じパターンが使える