Bashスクリプトは変数を実行しようとします。

Bashスクリプトは変数を実行しようとします。

次のような非常に短いBashスクリプトがあります。

variable="3 things"
if $(echo $variable|grep "^[0-9]\{1,\}") #if $variable begins with [0-9]
then
    echo $(echo $variable|sed 's/ .*$//')
else
    echo "0"
fi

$variable結局のところ、コマンドの出力は数字または「いいえ」という単語で始まる文字列になります。スクリプトに数字のみを返し、そうでない場合は数字0を返します。

エラーが発生し、script.bash: line 2: 3: command not foundbashがコマンド「3」を実行しようとしている理由を理解できません。どんな洞察力にも感謝します(またはこれを書くためのより良い方法の提案 - 私はbashスクリプトに精通していません)。

ありがとう

ベストアンサー1

この試み:

variable="3 things"
if echo "$variable" | grep "^[0-9]\{1,\}" >/dev/null 2>&1 #if $variable begins with [0-9]
then
    echo "$variable" | sed 's/ .*$//'
else
    echo "0"
fi

この$(...)シンボルを使用すると、内部コマンドを実行し、そのコマンドの出力をその場所に配置します。このコマンドはifこのコマンドの出力を実行し、成功したことを確認します。この場合、実際には$(...)

おすすめ記事