私は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"
$IFS
1入力行から先行スペースと末尾のスペース(スペースとタブ)が削除されないようにするには、デフォルト値を使用します。
²同様に、バックスラッシュは環境や構築方法echo
に応じて特別に処理できます。bash