コマンドは bash シェルでは機能しますが、エイリアスでは機能しません。

コマンドは bash シェルでは機能しますが、エイリアスでは機能しません。

次のコマンドを実行しています。

submit -n 72 -x '--mail-type=END -N2'

このコマンドは機能します。ただし、別名に設定すると、次のようになります。

alias foo='submit -n 72 -x '--mail-type=END -N2''

エラーにより失敗します。

bash: alias: -N2: not found

ただし、このエイリアスはうまく機能します。

alias foo='submit -n 72 -x '-N2''

そのため、--mail-type=END フラグメントに関する特定の事項が問題を引き起こします。

編集:alias = '...をalias foo = '...に変更しました。

答え1

提案が終了しました。代わり""にto containを試してください''。 (望むかもしれないし望ましくないかもしれない""補間法を使用しても)$variables

alias="submit -n 72 -x '--mail-type=END -N2'"

または、'\''「現在の一重引用符の終了、リテラル引用符の挿入、現在の一重引用符の再起動」トリックを使用します。つまり、内部のすべてが'次に置き換えられます。'\''

alias='submit -n 72 -x '\''--mail-type=END -N2'\'''

引用符があなたのような2つの単語ではなく1つの完全な文字列を生成することを確認する方法は次のとおりです。

# not ok, two distinct words
$ perl -E 'say for @ARGV' 'submit -n 72 -x '--mail-type=END -N2''
submit -n 72 -x --mail-type=END
-N2

# ok, a single string
$ perl -E 'say for @ARGV' 'submit -n 72 -x '-N2''                
submit -n 72 -x -N2
$ 

# ok, single quotes within doubles
$ perl -E 'say for @ARGV' "submit -n 72 -x '--mail-type=END -N2'"
submit -n 72 -x '--mail-type=END -N2'

# ok, '\'' trick
$ perl -E 'say for @ARGV' 'submit -n 72 -x '\''--mail-type=END -N2'\'''
submit -n 72 -x '--mail-type=END -N2'
$ 

に関してはfoo='submit -n 72 -x '-N2''いいえUNIXのネストされた参照欲しくないネスト。これは、シェルが$(cmd ... $(cmd ...))逆引用符のみを使用してネストする方法を特定しようとしない理由です。foo='submit -n 72 -x '-N2''は、より長く複雑に表現するfoo='submit -n 72 -x '-N2か、より簡単に表現しますfoo='submit -n 72 -x -N2'

答え2

引用符を入れ子にすることはできません。簡単な回避策は、別の引用符を使用することです。

alias foo='submit -n 72 -x "--mail-type=END -N2"'

より良い解決策は、エイリアスを使用しないことです。代わりに関数を使用してください。

foo () {
    submit -n 72 -x '--mail-type=END -N2' "$@"
}

関連情報