私のbashに適した文字列構文をどうやって見つけますか?

私のbashに適した文字列構文をどうやって見つけますか?

このエイリアスについてエラーメッセージが表示されます。

alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''

エラーメッセージは次のとおりです。

-bash: .bashrc: line 15: syntax error near unexpected token `('
-bash: .bashrc: line 15: `alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'''

エイリアスがたくさんありますが、このメッセージを理解できません!私は、文字列構文に関するさまざまなアドバイスを提供する多くのウェブサイトを見つけました。

私はOS X Mavericks(10.9.3)を使用しています。

私の質問は次のとおりです

私のbashバージョンを見つけて、バージョンに応じて私のbashファイルの正しい構文を決定するにはどうすればよいですか?

答え1

bash --version

alias ejectall=$'osascript -e \'tell application "Finder" to eject (every disk whose ejectable is true)'\'

答え2

問題は参照にあります。どのバージョンのbashを持っているかは問題ではありません(実行または把握することはできますがbash --versionecho "$BASH_VERSION"。これらの引用規則は変更されていません。

'- 見積もりは簡単です。彼らはただ次のものまで引用します'。したがって、あなたの例では次のようになります。

alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''
               ^             ^ 
            start           end

つまり、「tell application」で始まるすべてのエントリはシェルを参照しません。

次のことができます。

alias ejectall='osascript -e '\''tell application "Finder" to eject (every disk whose ejectable is true)'\'

デフォルトでは、引用符付き文字列を終了し、一重引用符(\')を入れてから、新しい引用符付き文字列を開始します。空白がないため、隣接する引用符付き文字列が一緒にマージされます。あなたは見ることができます:

$ echo 'I'\''ll work'
I'll work

他のオプションは-quotesを使用することです"。次に、別の二重引用符でエスケープ\"し、ドル記号でエスケープする必要があります\$

$ echo "That \"is\" \$3.00."
That "is" $3.00.

あるいは、Hauke Lagingが答えで指摘したように、Bashの$'-stringsを使用することもできます。これを介して ''文字列内で\'

これらのすべては、bashのマニュアルページの「参照」セクションで詳しく説明されています。

関連情報