2つのパラメータを受け入れるスクリプトを作成します。最初のパラメータはプレフィックス文字列を表し、2番目のパラメータはパスを表します(絶対パスであると仮定)。作成するスクリプトは、次のことを行う必要があります。
ユーザーが1つの引数(プレフィックス文字列)のみを入力した場合は、作業ディレクトリ内の名前がそのプレフィックスで始まるすべてのファイルのリストを表示する必要があります。ユーザーが2つのパラメータであるプレフィックス文字列とパスを入力した場合。次に、スクリプトは、2 番目の引数で指定されたパス内で、プレフィックス名で始まるすべてのディレクトリのリストを表示します。スクリプトを実行する前に、スクリプトは作業ディレクトリの値を返す必要があります。
ベストアンサー1
#!/bin/sh
( cd -- "${2:-.}" && ls -d -- "$1"*${2:+/} )
それは、
cd
2番目の引数が指定したディレクトリに移動するか、.
2番目の引数が指定されていないか空の場合。何もオプションとして解釈されない--
ようにしてください。cd
$2
ls -d
最初の引数で始まるすべての名前に対して実行されます。-d
上場を防ぐコンテンツディレクトリ名が一致するすべてのディレクトリ。何もオプションとして解釈されない--
ようにしてください。 2番目の引数が指定された場合、パターンは末尾の1を取得するため、ディレクトリ名のみが一致します。ls
$1
/
これはすべてサブシェルで発生するため、スクリプトの残りのcd
作業ディレクトリは変更されません(最後の文が意味するのはこれだと思います)。そのシェルがsource
スクリプトの実行に使用されていない限り、どのような状況でも、スクリプトは呼び出しシェルの作業ディレクトリを変更できず、サブシェルはこれが発生するのを防ぎます。したがって、作業ディレクトリは、スクリプトが実行される前の状態に復元(「返却」)されます。