関数内の複数の変数がエイリアスとして表現されません。私の構文は間違っていると思います

MarkB

にはbashrc、3つの変数をとることができるこのアラーム機能があります。

a () {
    local $1="${1:-3600}"
   local $2="${2:-paa}"
   local $3="${3:-alarm}"
    sleep "$1" && $2 && $3
}
alias pah='pactl set-card-profile 0 output:hdmi-stereo'
alias paa='pactl set-card-profile 0 output:analog-stereo'
alias alarm='vlc ~/alarm.mp3'

コマンドラインで、次のコマンドはエイリアスを正常に実行します。

sleep 3600 && paa && alarm

ただし、上記の関数のこの部分を作成しようとすると、次のエラーが発生します。

bash: pah: command not found

また、$ 1、$ 2、$ 3の変数は、デフォルトで3600paa、およびalarmに設定されている必要があります

また、$ 1と$ 2をデフォルトにできるようにしながら、$ 3の入力でこの関数を呼び出す方法についても混乱しています。

すなわち。

a null null alarm2

再投稿注:私はこれをStack Overflowに投稿しましたが、この質問はおそらくUnixとLinuxのスタック交換に属していることに気づきました。

Gilles'SO-悪であることをやめなさい '

実行からこの出力を取得する方法がわかりませんa:別のバージョンからの出力を投稿しましたか?しかしとにかく、私はコードの何が問題なのかわかります。

最初の問題は、local $1=…あなたが思っていることをしいないということです。名前が最初のパラメーターである変数を設定しますが、最初のパラメーターは設定しません。たとえば、関数をとして呼び出すa fooと、最初の行でローカル変数fooが値に設定されますfooa引数なしで呼び出すと、次のようになります。

bash: local: `=3600': not a valid identifier

(およびその他のエラー)左側に=あるのは空の文字列であり、空の文字列は変数の有効な名前ではないためです。

割り当て構文を使用して番号付きパラメーターを設定することはできませんlocal 1=…。どちらも機能しません。変数に名前を付けるか、set組み込みを使用してすべての番号付きパラメーターを一度に設定する必要があります。

a () {
    local delay="${1:-3600}"
    local first_command_to_split_and_glob="${2:-paa}"
    local second_command_to_split_and_glob="${3:-alarm}"
    sleep "$delay" && $first_command_to_split_and_glob && $second_command_to_split_and_glob
}

2番目の問題は、エイリアスがコマンドの先頭に明示的に表示されている場合にのみ展開されることです。それらは、変数の値を取るなど、他のいくつかの展開の結果から展開されません。

呼び出しには別の問題があります$first_command_to_split_and_glob。それは、単純な場合にのみ機能することです。変数の値(つまり、関数に渡される引数)を空白で分割し、各部分をワイルドカードパターンとして解釈し、パターンが少なくとも1つのファイル名と一致する場合に展開します。たとえばa 2 'cat "file name with spaces"'と呼ばれるファイルの内容を表示しようとすると"filenamewithspaces"引用符の外側の変数展開は、「split + glob」操作を適用します。これは、変数の値を生成せず、値の評価も実行しませんが、ほとんど役に立たない中間的なものです。シェルスクリプトが空白やその他の特殊文字でチョークするのはなぜですか?を参照してください詳細については。

これらの2つの問題を修正するevalには、文字列でを使用します。周りに二重引用符に注意"$first_command"して"$second_command"分割+グロブを避けるために。

a () {
    local delay="${1:-3600}"
    local first_command="${2:-paa}"
    local second_command="${3:-alarm}"
    sleep "$delay" && eval "$first_command" && eval "$second_command"
}

最後に、空の引数を渡すには、引用符を使用して空の文字列を区切ります。例えば:

a '' pah

3600秒待機してから実行しpah、次に実行しalarmます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

瞬間からの時間をdivクラスのセットと比較する関数を作成したいと思います(これが間違って表現されている場合は申し訳ありませんがコーディングは初めてです)

分類Dev

私のwhile関数は値を返しません!私は何が間違っているのですか

分類Dev

私は基本的なtoDoアプリに取り組んでいます。アイテムを長押しすると、リストから削除されますが、何も実行されません。私は何が間違っているのですか?

分類Dev

渡されたアイテムの数が間違っている4、正規表現で抽出している間、配置は1を意味します

分類Dev

ファイル処理のint関数とstr()関数。私はどこが間違っているのかわかりません

分類Dev

おじいちゃんについて話している変数に、彼は年を取っていると言いたいのですが、それは彼が年をとっていないと言っています。私が間違っていることは何ですか?前もって感謝します

分類Dev

私のプログラムは次のエラーを示しています: '引数' length.out 'は長さ1'でなければなりません。私は間違いを犯したとは思わない

分類Dev

Tensorflow 2.0コードを実行すると、「ValueError:tf.function-decorated関数が最初の呼び出し以外で変数を作成しようとしました」が表示されます。私は何が間違っているのですか?

分類Dev

IFERRORとして動作するが、TRUEを返す関数用のIFTRUEという関数を作成します。Worsheetfunction.ifが機能しません。私は何が間違っているのですか?

分類Dev

Linuxで.shスクリプトを実行すると構文エラーが発生します。私は何が間違っているのですか?

分類Dev

PHPは私の入力を8進数として扱っていると思いますが、停止させますか?

分類Dev

配列に単語を追加していない場合は、関数が機能していません。私は何が間違っているのですか?

分類Dev

JavaScript TypeError、undefinedのプロパティを読み取ることはできませんが、関数は定義されています。私は何が間違っているのですか?

分類Dev

含まれているライブラリで定義されているJS関数を使用すると、成功とエラーのコールバックが発生しません。私のJSまたは彼らの問題ですか?

分類Dev

関数が呼び出された変数参照を変更するのは間違っていますか?

分類Dev

このjqueryコードを私のrailsアプリで機能させようとしていますが、関数が呼び出されていません

分類Dev

変数は値を置き換えません。私は何が間違っているのですか?

分類Dev

C ++でポインターを渡す方法を学習しようとしていますが、エラーが発生します。「test」の呼び出しに一致する関数がありません。私は何が間違っているのですか?

分類Dev

正規表現で変数を使用するのが間違っています

分類Dev

タイムスタンプの日付変数の構文が間違っています

分類Dev

reactからフォームデータを取得し、それをサーバーに投稿してクエリ変数として使用する必要があります。私は何が間違っているのですか?

分類Dev

分母が表現しているとき、私は変数の係数を見つけることができません

分類Dev

JS関数の構文を理解する(他の言語にも当てはまると思います)

分類Dev

PHPSpreadsheetは、「INDEX()関数の引数の数が間違っています:5が指定され、1から4が予期されています」というエラーを生成します。

分類Dev

無関係な型がエイリアスとして定義されている場合、関数の呼び出しがあいまいです

分類Dev

TypeError:リストをPython関数に渡すときに引数の数が間違っています

分類Dev

パンダで変数の作成中にエラーが発生しました-渡されたアイテムの数が間違っています

分類Dev

私はこれをforループで間違って書いていることを知っていますが、複数の文字を受け入れることができるように正しく書くにはどうすればよいですか?

分類Dev

VBA正規表現-数式で使用されている値のデータ型が間違っています

Related 関連記事

  1. 1

    瞬間からの時間をdivクラスのセットと比較する関数を作成したいと思います(これが間違って表現されている場合は申し訳ありませんがコーディングは初めてです)

  2. 2

    私のwhile関数は値を返しません!私は何が間違っているのですか

  3. 3

    私は基本的なtoDoアプリに取り組んでいます。アイテムを長押しすると、リストから削除されますが、何も実行されません。私は何が間違っているのですか?

  4. 4

    渡されたアイテムの数が間違っている4、正規表現で抽出している間、配置は1を意味します

  5. 5

    ファイル処理のint関数とstr()関数。私はどこが間違っているのかわかりません

  6. 6

    おじいちゃんについて話している変数に、彼は年を取っていると言いたいのですが、それは彼が年をとっていないと言っています。私が間違っていることは何ですか?前もって感謝します

  7. 7

    私のプログラムは次のエラーを示しています: '引数' length.out 'は長さ1'でなければなりません。私は間違いを犯したとは思わない

  8. 8

    Tensorflow 2.0コードを実行すると、「ValueError:tf.function-decorated関数が最初の呼び出し以外で変数を作成しようとしました」が表示されます。私は何が間違っているのですか?

  9. 9

    IFERRORとして動作するが、TRUEを返す関数用のIFTRUEという関数を作成します。Worsheetfunction.ifが機能しません。私は何が間違っているのですか?

  10. 10

    Linuxで.shスクリプトを実行すると構文エラーが発生します。私は何が間違っているのですか?

  11. 11

    PHPは私の入力を8進数として扱っていると思いますが、停止させますか?

  12. 12

    配列に単語を追加していない場合は、関数が機能していません。私は何が間違っているのですか?

  13. 13

    JavaScript TypeError、undefinedのプロパティを読み取ることはできませんが、関数は定義されています。私は何が間違っているのですか?

  14. 14

    含まれているライブラリで定義されているJS関数を使用すると、成功とエラーのコールバックが発生しません。私のJSまたは彼らの問題ですか?

  15. 15

    関数が呼び出された変数参照を変更するのは間違っていますか?

  16. 16

    このjqueryコードを私のrailsアプリで機能させようとしていますが、関数が呼び出されていません

  17. 17

    変数は値を置き換えません。私は何が間違っているのですか?

  18. 18

    C ++でポインターを渡す方法を学習しようとしていますが、エラーが発生します。「test」の呼び出しに一致する関数がありません。私は何が間違っているのですか?

  19. 19

    正規表現で変数を使用するのが間違っています

  20. 20

    タイムスタンプの日付変数の構文が間違っています

  21. 21

    reactからフォームデータを取得し、それをサーバーに投稿してクエリ変数として使用する必要があります。私は何が間違っているのですか?

  22. 22

    分母が表現しているとき、私は変数の係数を見つけることができません

  23. 23

    JS関数の構文を理解する(他の言語にも当てはまると思います)

  24. 24

    PHPSpreadsheetは、「INDEX()関数の引数の数が間違っています:5が指定され、1から4が予期されています」というエラーを生成します。

  25. 25

    無関係な型がエイリアスとして定義されている場合、関数の呼び出しがあいまいです

  26. 26

    TypeError:リストをPython関数に渡すときに引数の数が間違っています

  27. 27

    パンダで変数の作成中にエラーが発生しました-渡されたアイテムの数が間違っています

  28. 28

    私はこれをforループで間違って書いていることを知っていますが、複数の文字を受け入れることができるように正しく書くにはどうすればよいですか?

  29. 29

    VBA正規表現-数式で使用されている値のデータ型が間違っています

ホットタグ

アーカイブ