Linux Bashスクリプトとワイルドカードに関する問題

Linux Bashスクリプトとワイルドカードに関する問題

単純なbashコマンドだと思うのに問題があります。

私は基本的に複数のファイルを繰り返して名前を取得したいと思います。

`ls ./*.sql`               # list all files ending with .sql

if [ $? != 0 ]             # make sure such files exist
then
    echo "no such file"
else 
    echo "files exist"
fi

私が走るとき

"ls ./*.sql"

期待していたものを手に入れた

./file01.sql    ./file02.sql

しかし、bashスクリプトを実行すると

./file01.sql: line 1: some random error
./file01.sql: line 2: some random error
./file01.sql: line 3: some random error
./file02.sql: line 1: some random error
./file02.sql: line 2: some random error
./file02.sql: line 3: some random error

なぜこれが違うのか知っている人はいますか?

ベストアンサー1

後に続く引用符です。実行するコマンドの出力をシェルに通知します。

例えば

`echo ls`

実行できますls

あなたの場合、bashにsqlファイルの実行を要求しました。 bashはこれを行うことができず、SQLはbashには適していないので、これは明らかにあなたが望むものではありません。

また、この修正を適用しても、スクリプトは説明されているようには行われません。他の人(Janis)もこの問題を解決する答えを提供しましたが、スクリプトがなぜそうしたのか説明しませんでした。

おすすめ記事