1. ホーム
  2. bash

最後のパラメータより前のパラメータを"$@"で取り出す

2023-10-17 18:24:40

質問

私は、コマンドラインから与えられた最後のパラメータを変数に抽出し、他の場所で使用するBashスクリプトを作成しようとしています。 以下は、私が取り組んでいるスクリプトです。

#!/bin/bash
# compact - archive and compact file/folder(s)

eval LAST=\$$#

FILES="$@"
NAME=$LAST

# Usage - display usage if no parameters are given
if [[ -z $NAME ]]; then
  echo "compact <file> <folder>... <compressed-name>.tar.gz"
  exit
fi

# Check if an archive name has been given
if [[ -f $NAME ]]; then
  echo "File exists or you forgot to enter a filename.  Exiting."
  exit
fi

tar -czvpf "$NAME".tar.gz $FILES

最初のパラメータは任意の数でよいので、最後のパラメータを抽出する方法を見つけなければなりません (例: compact file.a file.b file.d files-a-b-d.tar.gz). 今のままでは、アーカイブ名が圧縮するファイルに含まれてしまいます。 これを行う方法はありますか?

どのように解決するのですか?

配列から最後の項目を削除するには、次のような方法があります。

#!/bin/bash

length=$(($#-1))
array=${@:1:$length}
echo $array

さらに短い方法

array=${@:1:$#-1}

しかし、アライは バシズム なので、なるべく使わないようにしましょう :(