「2.0.1」と「2.0.12」の文字の前の文字を抽出する必要があります。次の文字列から
sgdgfhfh-ZZZZZZ-ZZZ-2.0.1.ZZZ,sgdgfhfh-ZZZZZZ-ZZZ-2.0.12.ZZ :
努力しています:
#!/bin/bash
c=grep -o '[.0-9]*[0-9]' $1
echo $c
file$1
は埋め込みテキストファイルで、ZZZZZZ-ZZZ-2.0.1.ZZZ
エラーが発生します。
line 2: -o: command not found
ベストアンサー1
@Archemarが彼の意見で言ったように、あなたの命令は
c=grep -o '[.0-9]*[0-9]' $1
grep
まったく実装されていません。変数をコマンド出力に設定する構文は次のとおりです。
c=$(grep -o '[.0-9]*[0-9]' $1)
$(command)
このコマンドの出力に置き換えられます。
しかし、なぜこのような奇妙なエラーメッセージが表示されるのですか?コマンドを実行する前に変数の割り当てが有効であるためです。これは、変数がこのコマンドに対してのみ設定されていることを意味します。これは、変数を永久に設定または変更したくない場合に便利です。したがって、あなたの行は、「変数がc
文字列に設定され、コマンドがパラメータでgrep
実行される必要があるため、-o
コマンドは検索されますが見つかりません」と解釈されます。'[.0-9]*[0-9]'
$1
-o