変数を読み込み、ユーザー入力からバックスラッシュを保持するには、「読み取り」を使用します。

変数を読み込み、ユーザー入力からバックスラッシュを保持するには、「読み取り」を使用します。

私はread次のようにユーザーからパスを読み取るために使用します。

read -p "Input the file name: " FilePath

ユーザーは次の文字列を入力します。

\Supernova\projects\ui\nebula

\私が望む結果は次のとおりです/

/Supernova/projects/ui/nebula 

ちなみに、コマンドは次のようになります。

echo $FilePath

出力結果:

Supernovaprojectsuinebula

私は何が間違っているのかわかりません。

ベストアンサー1

問題は、read入力のバックスラッシュをエスケープ演算子(使用時に行が続くread word1 word2ように区切り文字と改行文字をエスケープする演算子)として扱うことです。

必要な操作を実行するには、バックスラッシュ処理を実行しないように指示する-rスイッチを追加する必要があり、行全体を変数に割り当てるフルワードとして扱うように空の文字列にread設定する必要があります。$IFS

IFS= read -rp "Input file name: " FilePath
UnixPath="${FilePath//\\//}"

また、あなたのecho命令は変数の置換には二重引用符が必要です。echo "$FilePath"、とにかく一般的にecho任意のデータの出力には使用できません。² したがって:

printf '%s\n' "$FilePath"

$IFS1入力行から先行スペースと末尾のスペース(スペースとタブ)が削除されないようにするには、デフォルト値を使用します。

²同様に、バックスラッシュは環境や構築方法echoに応じて特別に処理できます。bash

おすすめ記事