コマンド出力を変数[冗長]に設定するスクリプト

コマンド出力を変数[冗長]に設定するスクリプト

私はユーザーに情報を要求し、それを変数として保存して他のコマンドにパラメータとして渡す簡単なスクリプトを書いています。変数の1つは、スペースを含めることができるパスを格納します。readコマンドラベルを使用すると、パスは-rバックスラッシュエスケープ文字を無視し、「生」入力として検索されます。

たとえば、

read -p "Enter checksum algorithm number (1, 224, 256, 384, 512, 512224, 412256): " -a shaa
read -p "Enter a file path: " -re shapath

問題は、エスケープ文字を読み取らないと、これらのパラメータを使用してコマンドを実行する方法がわからないことです。 @heemaylに従って解決しました

その後、コマンドの出力または戻り値を別の変数として保存する必要があります。

たとえば、

foo=$(shasum -a "$shaa" "$shapath")

しかし、echo $foo予想される結果が得られなければ、shasum -a "$shaa" "$shapath"代わりにshasum: /.../checksum.dmg

次のように使用してパイピングして動作させることevalができましたvar

eval shasum -a $sha $shapath > val

eval私はどんな対価を払ってもそれを避けなければならず、スクリプトを続けることができないことを読んだ。

答え1

引用符を使用する:

shasum -a "$sha" "$shapath"

変数は、値に空白があるかどうかにかかわらず、単一の引数に展開されます。

関連情報