配列の分割から取得したコンテンツを次のように出力したいと思います。
string="abc test;ABCtest.it"
IFS=';' read -a array <<< "$string"
name="${array[0]}"
url="${array[1]}"
echo -ne "\n$url,$name" >> "$outputDir/$fileName"
ただし、出力ファイルにはURL部分が含まれていません。
問題はだと思いますが、.
どうすればいいのかわかりません。
これを試してみると
echo $url
できます!
printf
ハードコードされたファイル名でも試してみましたが、何もありません!
printf '%s %s\n' "$url" "$name" >> test.txt
変数の後に別のものを連結しようとする$url
と、変数の一部が削除されるか、出力ファイルに上書きされるようです。
たとえば、これを試してみると:
printf '%s %s\n' "$url" "pp" >> test.txt
私が簡単に得るものcat test.txt
はこれです:
pptest.it
ただし、変数の内容はである$url
必要がありますABCTest.it
。
chepnerの役立つ答えを補完するために:
場合は、出力はありません見て、あなたはそれが見えるように期待するもの、それはいつもだ価値が検討を探すために、その内容を隠された制御文字データの外観変更される可能性があり、出力上に。
\r
、CR(キャリッジリターン; ASCII値13)は、次の2つの理由で悪名高い例です。
echo $'abcd\refg'
prints efgd
:これ\r
により、行の先頭から印刷が再開されます。たまたま1文字であったため、存続する前のd
文字列からの文字列のみが表示されます。の後に続く文字列よりも長い。(注:構文は、いわゆるANSI C引用符で囲まれた文字列であり、inなどのエスケープシーケンスを使用して実際の制御文字を作成できます。)\r
$'...'
\r
$'...\r...'
\r
文字を含むファイル。改行が\n
文字だけでなく\r\n
シーケンスであるWindowsの世界とインターフェイスするときに頻繁に発生し、そのようなファイルはUnixの世界では奇妙に動作します。cat -et
ハイライトとして文字を制御、^<char>
シーケンス:
^M
\r
(CR)を表します^I
\t
(タブ文字)を表します^[
ESC文字を表します。... # see 'man cat'
$
^M$
は、によって出力された行の終わりに表示されcat -et
ます。cat -et
上記の例に適用すると、次のようになり、問題の診断が容易になります。
echo $'abcd\refg' | cat -et # -> 'abcd^Mefg$' - note the ^M
dos2unix
はWindowsスタイルの行末(\r\n
)をUnixのもの(\r\n
)に変換するための頼りになるツールですが、このツールはほとんどのUnixライクなプラットフォームにプリインストールされておらず、標準のPOSIXユーティリティを使用してそのような変換を実行するのは簡単です。
awk 'sub("\r$", "")+1' win.txt > unix.txt
sed
、以下はその場で変換を実行します。
sed -i 's/\r$//' winIn_UnixOut.txt
sed
(また、上で使用されるOSX)からbash
、ksh
またはzsh
:
sed -i '' $'s/\r$//' winIn_UnixOut.txt
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加