録音に使用する別のフラッシュドライブにフォルダを作成し、メディアデバイスのラベルと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つ以上の空白文字を単一の空白に変換することです.
この場合、$(...)
バックティックバージョンの代わりに同等のバックティックバージョンを使用します。一般的に言えば、このバージョンは読みやすくなると思います。$(...$(...))
バックティックバージョンは入れ子にすることはできませんが、()入れ子にすることができるという利点もあります。