GNU/Linux >> Linux の 問題 >  >> Linux

bash で関数のようなマクロを定義する

任意の構文で何かを行うことはできません。括弧はメタ文字です これらはパーサーにとって特別な意味を持つため、有効な名前として使用する方法はありません .シェルを拡張する最善の方法は、関数を定義することです。

これは基本的な echo になります 常に同じファイルに書き込むラッパー:

f() {
    echo "[email protected]"
} >a.txt

これはほぼ同じですが、さらに stdin を処理します - echo's を犠牲にします -e-n オプション:

f() {
    [[ ${1+_} || ! -t 0 ]] && printf '%s\n' "${*-$(</dev/fd/0)}"
} >a.txt

として呼び出すことができます

f arg1 arg2...

または

f <file

関数には、他のコマンドと同じ方法で引数が渡されます。

2 番目のエコーに似たラッパーは、最初の引数が設定されているか、非 tty からの stdin を最初にテストし、条件付きで、設定されている場合は位置パラメータまたは stdin を使用して printf を呼び出します。テスト式は、引数がゼロで、ファイルからのリダイレクトがない場合を回避します。この場合、Bash はターミナルの出力を展開しようとし、シェルをハングさせます。


はい、あなただけが F sth で呼び出す必要があります :

F()
{
  echo "$1" > a.txt
}

詳細はこちら


F () {
  echo "$1" > a.txt
}

呼び出すときに括弧を使用しません。これはあなたがそれをどのように呼ぶかです:

F "text to save"

Linux
  1. Bashスクリプト(I)

  2. bash エクスポート コマンド

  3. Bash での日付比較

  1. Bashで「カット」を使用して「タブ」区切り文字を定義するにはどうすればよいですか?

  2. jenkins パイプラインで bash コマンドを実行する

  3. (reverse-i-search) Bash で

  1. Bashエクスポート変数

  2. bash での並べ替え

  3. unix/linux コマンド ラインで関数を定義する (例:BASH)