- PR -

Cシェルの構文について

投稿者投稿内容
ベテラン
会議室デビュー日: 2007/10/17
投稿数: 58
投稿日時: 2008-08-15 15:03
Cシェルの構文について教えていただければと思います。
lsの結果で拡張子が.cshのファイルを洗い出す予定なのですが
『"$KAKUCYOU"』の部分が間違っているようなのです。

-----------------------------------------------------------
#!/bin/csh
set KAKUCYOU = ".csh"
ls | nawk '{if ($1 ~ "$KAKUCYOU"){printf "%s\n",$1}}'
-----------------------------------------------------------
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-08-15 15:24
ls *.csh
ではだめなのですか?
または
ls |grep '.csh'
では
ベテラン
会議室デビュー日: 2007/10/17
投稿数: 58
投稿日時: 2008-08-15 15:31
引用:

deannaさんの書き込み (2008-08-15 15:24) より:
ls *.csh
ではだめなのですか?
または
ls |grep '.csh'
では



deannaさん、ご回答ありがとうございます。
質問文の内容がいまいちだったのですが
この構文のどこがまずいのかが分からないので
困っていたのです。(勉強をかねているので)
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2008-08-15 21:10
こんばんは。

csh文法を敢えて勉強する、というのはお勧めではないのですが…。

問題となるのは、クォートで囲まれた部分での変数展開です。

単純な例として、変数 kakucyou に設定した内容を単に出力するスクリプトを考えてみると、
・例1. 質問内容と同等
コード:
set kakucyou = .csh
echo '$kakucyou'


・例2. クォートの違い
コード:
set kakucyou = .csh
echo "$kakucyou"


・例3. では、".csh" という出力にするには?
コード:
set kakucyou = .csh
echo '"'"$kakucyou"'"'


それぞれ試して違いを見てください。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2008-08-15 21:17
なお、余談ですが、csh文法を勉強するよりも、sh系 ( ksh/bash等 ) のスクリプトを勉強する方がお勧めです。
それと、シェルスクリプトに重要なのは、文法というよりも、個々のコマンドの使いこなしなので、
deanna さんのように、“ls *.csh”や、“ls | grep .csh”といった、代替のコマンドを直ぐ出せる力の方が重要です。
※他にも“find . -name '*.csh'”とか
※元のスクリプトだと、“a.csh.bak”も引っかかるけど良いのか、というようなツッコミもあります

あくまで余談ですが。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2008-08-18 09:59
引用:

それぞれ試して違いを見てください。


を試す際に、bashだと
bash -x
で起動した環境で実行することで、
変数・エイリアス等の展開状況が確認できます。
cshは知りませんが、tcshにも-xで同様なことができるみたいですね。

実行されるコマンドラインがどう振舞ってるのかを確認する術を
身につけるのも重要だと思います。
ベテラン
会議室デビュー日: 2007/10/17
投稿数: 58
投稿日時: 2008-08-18 10:12
引用:

angelさんの書き込み (2008-08-15 21:10) より:
こんばんは。

csh文法を敢えて勉強する、というのはお勧めではないのですが…。

問題となるのは、クォートで囲まれた部分での変数展開です。

単純な例として、変数 kakucyou に設定した内容を単に出力するスクリプトを考えてみると、
・例1. 質問内容と同等
コード:
set kakucyou = .csh
echo '$kakucyou'


・例2. クォートの違い
コード:
set kakucyou = .csh
echo "$kakucyou"


・例3. では、".csh" という出力にするには?
コード:
set kakucyou = .csh
echo '"'"$kakucyou"'"'


それぞれ試して違いを見てください。



angelさん、回答ありがとうございます。
(例1、例2、例3)の違い理解できたと思っています。

元々のシェルの部分で
set KAKUCYOU = ".csh" を
set KAKUCYOU = .cshに変更すれば
うまく行くかと思ったのですが駄目でした。
もう少し考えて見ます。
ベテラン
会議室デビュー日: 2007/10/17
投稿数: 58
投稿日時: 2008-08-18 14:09
引用:

Mattunさんの書き込み (2008-08-18 09:59) より:
引用:

それぞれ試して違いを見てください。


を試す際に、bashだと
bash -x
で起動した環境で実行することで、
変数・エイリアス等の展開状況が確認できます。
cshは知りませんが、tcshにも-xで同様なことができるみたいですね。

実行されるコマンドラインがどう振舞ってるのかを確認する術を
身につけるのも重要だと思います。



Mattunさん、ありがとうございます。
cshも「-x」でデバッグのような情報が参照できました。

スキルアップ/キャリアアップ(JOB@IT)