web-dev-qa-db-ja.com

bash:[:引数が多すぎますか?

ディレクトリとcdを作成しようとしています:

〜/ .bashrcの場合:

function abc() {
  appname=$1
  appdir="$HOME/code/$appname"
  if [ mkdir $appdir -a cd $appdir ]; then
    echo Success
  else
    echo Failed to create and switch directory
  fi
}

Bashrc(. ~/.bashrc)をリロードすると、エラーが発生します。

bash: [: too many arguments
Failed to create and switch directory

どうすれば修正できますか?エラーの[:はどういう意味ですか?

Ps。「暗号化されていない」bashスクリプトチュートリアルを教えてもらえますか?

8
Zabba

スクリプトの主なエラーは、testコマンドに相当する[コマンドを使用して、文字列比較、ファイルの存在などの条件をテストすることです。

プロセスの終了ステータスをテストするには、[なしでifを使用する必要があるため、スクリプトは

if mkdir "$appdir" && cd "$appdir"; then
  echo "Success"
else
  echo "Failed to create and switch directory"
fi

これは Bash Pitfalls:9. if [grep foo myfile で説明されています。

GrayCat Bash Guide を読んでbashを理解することをお勧めします。

12
enzotib