私はシェルスクリプトが初めてです。誰かが「\」でスペースをエスケープするコマンドを手伝ってくれませんか。変数 FILE_PATH=/path/to my/text file
があり、スペースだけをエスケープしたい FILE_PATH=/path/to\ my/text\ file
tr -s コマンドで試しましたが、役に立ちません
ファイルパス=echo FILE_PATH | tr -s " " "\\ "
誰かが正しいコマンドを提案できますか!!
bash を使用している場合は、組み込みの printf の %q フォーマッタ ( help printf
bash で入力)を使用できます。
FILENAME=$(printf %q "$FILENAME")
これは、スペースだけでなく、シェルのすべての特殊文字も引用します。
文字列を安全にするには、スペースをエスケープするだけではありませんが、次の方法でスペースをエスケープできます。
FILE_PATH=$( echo "$FILE_PATH" | sed 's/ /\\ /g' )
'一重引用符' を使用して、スペースを含むパスを操作できます。
cp '/path/with spaces/file.txt' '/another/spacey path/dir'
grep foo '/my/super spacey/path with spaces/folder/*'
スクリプトで:
#!/bin/bash
spacey_dir='My Documents'
spacey_file='Hello World.txt'
mkdir '$spacey_dir'
touch '${spacey_dir}/${spacey_file}'
あなたはそれを行うことができますsed
:
NEW_FILE_PATH="$(echo $FILE_PATH | sed 's/ /\\\ /g')"
引用符を使用して SPACE 文字を保持する
tr は、個々の文字を 1 対 1 で置き換えるためだけに使用されます。sed が必要なようです。
echo $FILE_PATH | sed -e 's/ /\\ /'
あなたが望むことをするようです。
Do not forget to use eval when using printf guarding.
Here's a sample from Codegen Script under Build Phases of Xcode (somehow PROJECT_DIR is not guarded of spaces, so build was failing if you have a path with spaces):
PROJECT_DIR_GUARDED=$(printf %q "$PROJECT_DIR")
eval $PROJECT_DIR_GUARDED/scripts/code_gen.sh $PROJECT_DIR_GUARDED
FILE_PATH=/path/to my/text file
FILE_PATH=echo FILE_PATH | tr -s " " "\\ "
その2行目は
FILE_PATH=echo $FILE_PATH | tr -s " " "\\ "
しかし、それは問題ではないと思います。この段階に来てからでは手遅れです。変数が設定されていますが、スペースがエスケープされているか、変数が正しくありません。
FILE_PATH='/path/to my/text file'