前提
シェルスクリプトで引数で与えた文字列のうち、一部分を変数に格納する処理の実装を試みています。
該当のソースコード
bash
1 2str=${1} 3str=${2} 4part_str1="${str} | awk -F "/" '{print ${2}}'" 5part_str2="${str} | awk -F "/" '{print ${2}}'"
実行コマンド
$bash test.sh /home/user1/work /home/user2/work
質問内容
ソースコードの以下に関して、${2}の/home/user2/workとなります。
-Fで「/」区切りを指定しているにも関わらず、2番目の値が取得できません。
awkコマンドでスクリプトの引数と区別する方法はないのでしょうか。
part_str1="${str} | awk -F "/" '{print ${2}}'"
part_str2="${str} | awk -F "/" '{print ${2}}'"
知見のある方、ご教示お願い致します。
つまり、以下の様な事をしたいのでしょうか?
str1="${1}"
str2="${2}"
part_str1=$(echo "${str1}" | awk -F "/" '{print $3}')
part_str2=$(echo "${str2}" | awk -F "/" '{print $3}')
echo ${part_str1}
echo ${part_str2}
認識齟齬ないです。
$3だとスクリプトの引数と競合しないので、問題ないですが、S1,$2の場合の回避策ありますか??
'{print $3}' の様にシングルクォートで囲んでいればシェル変数として展開されませんので、
$(echo "${str1}" | awk -F "/" '{print $2}')
としても問題ありません。
無事実装できました!
ベストアンサーに選定させて頂きたいので、回答のほうに記載お願い致します。
ありがとうございます。回答へ転記しました。