文字列の一部をエコーできません。
簡略化されたバージョンは次のとおりです。
t=no_1187985:/home/my.name/testing/no
no_1187985をエコーしたいです。
tt=$(echo $t | cut -d":" -f 1)
echo $tt
ただし、これは空白のみを生成します(実際のスクリプトではコマンドエラーは見つかりません)。
-f 1を-f 2に変更すると、2番目のフィールドでは機能しますが、なぜ最初のフィールドでは機能しないのか理解できません。
これはコンテキストの実際のコードの一部です。
while read line;
do
#echo $line
#sleep 1
path=$(dirname "$line")
#echo $path
#mkdir -p $(echo $path | cut -d":" -f 2)
inode= $(echo $path | cut -d":" -f 1)
echo $inode
#mv ~/deleted/$inode $(echo $line | cut -d":" -f 2);
done < .temp
ごみ箱を作成しようとしています。 temp は、「復元」する他のファイルのパス名を含むファイルです。各行を繰り返します。ファイルをディレクトリツリーに戻す前に、ディレクトリツリーを再作成します。ファイルは現在削除されているフォルダに保存され、最後に対応するinode番号が追加されています。ファイルが「復元」(つまり、戻る)になると、ファイル名からinodeが削除されます。
.tempファイルにはファイル名(元のファイル名とinodeの組み合わせ)と元のパス名が含まれており、両方とも「:」区切り文字で区切られています。
答え1
=
変数代入記号の周りにスペースを入れないでください。
シーン1:
inode = something
- bashはinode
2つの引数を使用してコマンドを実行しようとします。- これは次のように言うのと同じです。
inode "=" "something"
シナリオ 2:
inode =something
inode
- bash は、1 つの引数 (string) という名前の'=something'
コマンドを実行しようとします。- これは次のように言うのと同じです。
inode "=something"
シーン3:
inode= something
something
– bash は、環境がinode
空の文字列に設定された状態でコマンドを実行しようとします。- これは次のように言うのと同じです。
inode="" something
ノート:確認部分2.9.1 簡単なコマンド下記の参考文献から。
引用:シェルコマンド言語