変数の先頭からスペースを削除できません。

変数の先頭からスペースを削除できません。

録音に使用する別のフラッシュドライブにフォルダを作成し、メディアデバイスのラベルとuuidを名前で挿入しようとしています。次のコードがあります。

LOGDEVICELABEL=FLASHDRIVENAME
MD=`lsblk -I 8 -o label,uuid -n|sed -e '/^$/ d' -e '/^$LOGDEVICELABEL.*$/ d'`
MDLOGDIR=/media/$LOGDEVICELABEL/Log/$MD
mkdir $MDLOGDIR

問題は、変数値の$MD先頭にスペースがあり、それを削除できないことです。空白のため、mkdirは/media/$LOGDEVICELABEL/Log/2$MDつの別々の引数として扱われます。

私は試した:

MDLOGDIR=`sed 's/ // g' <<</media/$LOGDEVICELABEL/Log/$MD` 

UUIDとLabel(必須)の間のスペースのみを削除し、間/media/$LOGDEVICELABEL/Log/のスペースは削除しません$MD

ベストアンサー1

私がしたいことの1つは、echo望ましくないスペースを削除することです。この場合、引用符を省略することが重要です。

LOGDEVICELABEL=FLASHDRIVENAME
MD=$(lsblk -I 8 -o label,uuid -n|sed -e '/^$/ d' -e '/^$LOGDEVICELABEL.*$/ d')
MD=$(echo $MD) # <-- This line
MDLOGDIR=/media/$LOGDEVICELABEL/Log/$MD
mkdir $MDLOGDIR

シェルはこのコマンドを呼び出し、コマンドがスペース文字で区切って印刷する一連のechoトークンを提供します。echoその効果は、(1)先行および末尾の空白をスキップし、(2)トークン間の1つ以上の空白文字を単一の空白に変換することです.

この場合、$(...)バックティックバージョンの代わりに同等のバックティックバージョンを使用します。一般的に言えば、このバージョンは読みやすくなると思います。$(...$(...))バックティックバージョンは入れ子にすることはできませんが、()入れ子にすることができるという利点もあります。

おすすめ記事