2

スクリプト例:

#!/bin/bash

printf '1\n1\n1\n1\n' | ./script2*.sh >/dev/null 2>/dev/null

Shellcheck は以下を返します。

In script1.sh line 3:
printf '1\n1\n1\n1\n' | ./script2*.sh >/dev/null 2>/dev/null
                        ^-- SC2211: This is a glob used as a command name. Was it supposed to be in ${..}, array, or is it missing quoting?

https://github.com/koalaman/shellcheck/wiki/SC2211によると、この規則に例外はありません。

具体的には、「glob を介してコマンド名を指定する場合、たとえば ./myprogram-*/foo でバージョンをハードコードしない場合は、最初に配列またはパラメーターに展開して、0 または 2+ の一致のケースを処理できるようにする」ことを提案します。

そもそもグロブを使用している理由は、作成または変更したばかりのスクリプトに日付を追加または変更するためです。興味深いことに、"./script2*.sh" の代わりに "bash script2*.sh" を使用すると、苦情がなくなります。

問題を修正しましたか、それとも無視してはならない問題を無視するように shellcheck を騙していますか? 不適切な bash 構文を使用している場合、適切な方法でグロブを使用して参照する必要がある別のスクリプトを実行するにはどうすればよいですか?

4

1 に答える 1