これは私のコードです。
#!/bin/bash
FILES=~/Desktop/cpp/$1/*
mkdir ~/Desktop/cpp/$1o
for f in $FILES
do
echo $(basename $f) >> ~/Desktop/cpp/$1err.log
g++ '"'$f'"' -std=c++11 -o '"'~/Desktop/cpp/$1o/$(basename "$f").out'"' 2>> ~/Desktop/cpp/$1err.log
done
""部分を使用しないと、スペースなしでファイルに対してスクリプトが正しく機能します。それらを使用すると、次のように言うでしょう。
usr/bin/ld: cannot open output file /dirname/-
x.out: No such file or directory
スペースをサポートするために、ファイル名の周りに引用符を追加するにはどうすればよいですか?
ベストアンサー1
'"'
リテラル二重引用符文字列ではなく、通常の二重引用符のみを使用して、変数を二重引用符として引用符で囲む必要があります"$f"
。バラよりbash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスクすべての血まみれの詳細について。
重複を減らすために、より多くの変数を使用します。
この試み:
#!/usr/bin/env bash
cppdir="$HOME/Desktop/cpp/$1"
if [[ ! -d "$cppdir" ]]; then
echo "No such directory" >&2
exit 1
fi
outdir="${cppdir}o"
mkdir -p "$outdir"
errlog="${cppdir}err.log"
for f in "$cppdir"/*; do
b=$(basename "$f")
printf '%s\n' "$b" >> "$errlog"
g++ "$f" -std=c++11 -o "$outdir/$b.out" 2>> "$errlog"
done