sedはスクリプト内の私のBASH変数を拡張しません。

sedはスクリプト内の私のBASH変数を拡張しません。

ファイルへの相対パスまたは絶対パスを求めるプロンプトが表示され、スペースを置き換えるスクリプトがあります。''そして「\」Linuxコンソールで動作します。交換は最初のものを使用して行われます。sed注文する。私の交換後エコパスは単に確認用なので正確です。

それから2番目sedこのコマンドは、私が絶対パスを作成したファイルを処理する必要があります。まあ、それはうまくいきません... 2番目のコマンドのようなものです。$drill_file拡張はありません。最も奇妙なことは、スクリプトの外でもうまく拡張されていることです...うわー! ?

#!/bin/bash

echo "Give relative or absolute path to the \"drill.TXT\" file:"

read drill_file_temp
drill_file=$(echo $drill_file_temp | sed -r 's/\s/\\ /g')
echo $drill_file

sed 's/\(^X[[:digit:]]*\)[[:digit:]]\(Y[[:digit:]]*\)[[:digit:]]/\1\2/' $drill_file

echo "Conversion finished."

ベストアンサー1

文字列に引用符を入れます。問題は、パラメータ拡張後に引用符付き文字が解析されないことです。希望の効果を得るために必要

eval sed ... $drill_file

set -x以下を使用して、シェルがコマンドラインをどのように表示するかを確認できます。

> text=a\\\ \\\ \\\ b
> echo $text
a\ \ \ b
> set -x
> : $text
+ : 'a\' '\' '\' b

つまり、シェルは1つのパラメータではなく4つのパラメータを表示します。

他の人が言ったように、$drill_file/を引用する必要があります$drill_file_temp"$drill_file"

おすすめ記事