0

コマンドラインを表す文字列を指定すると、コマンドラインの最初のトークン (つまり、名前にスペースが含まれる可能性のある呼び出されるプログラム) だけを返し、引数を削除する bash 関数を作成する必要があります。orまたは bash ビルトインと変数操作以外は使用せずにこれを実行したいと考えています。sedawk

例えば:

drop_args "ls" # prints "ls"
drop_args "ls -al" # prints "ls"
drop_args "spaces\ in\ name --bad-idea" # prints "spaces\ in\ name"

私が試したことは次のとおりです。

drop_args () { echo $1; }

そしてdrop_args ls -al、文字列を引用せずに を呼び出します。これは、 を除くすべてのケースでうまく機能しdrop_args spaces\ in\ nameます。

私が規定した制限でスペースのケースを正しく処理する方法でこれを行うことができなくても、私はそれほど心配していませんが、少なくともその状況を確実に検出し、適切なエラーメッセージを表示する必要があると思います.

これは、シェル エイリアスの逆参照に関する以前の質問に関連しています。それは、私が最終的にそこで達成しようとしていることの副問題のようなものです。

4

1 に答える 1

0
drop_args()
{
  read cmd args <<< "$1"
  echo "$cmd"
}

これによりバックスラッシュが失われますが、そもそもバックスラッシュが「そこにある」ことを意図したものではありません。

于 2013-01-07T04:14:53.110 に答える