คำถามติดแท็ก variable

ตัวแปรคือชื่อถ้าเลือกอย่างถูกต้องด้วยความหมายเชิงสัญลักษณ์ที่เก็บค่าหรือค่า ใช้แท็กนี้หากคำถามของคุณเกี่ยวกับการใช้ตัวแปรในการเขียนสคริปต์เชลล์ (หากคุณต้องการถามเกี่ยวกับตัวแปรในภาษาการเขียนโปรแกรมคุณควรถามเกี่ยวกับ StackOverflow)

3
การใช้“ $ {a: -b}” สำหรับการกำหนดตัวแปรในสคริปต์
ฉันดูสคริปต์บางตัวที่คนอื่นเขียน (โดยเฉพาะ Red Hat) และตัวแปรจำนวนมากถูกกำหนดโดยใช้สัญกรณ์ต่อไปนี้ VARIABLE1="${VARIABLE1:-some_val}" หรือบางตัวขยายตัวแปรอื่น ๆ VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}" จุดประสงค์ของการใช้สัญลักษณ์นี้แทนที่จะประกาศเพียงค่าโดยตรงVARIABLE1=some_valคืออะไร? มีประโยชน์กับสัญกรณ์นี้หรือข้อผิดพลาดที่เป็นไปได้ที่จะป้องกัน? ที่ไม่:-ได้มีความหมายเฉพาะในบริบทนี้?

3
มีแบบแผนการตั้งชื่อตัวแปรในเชลล์สคริปต์หรือไม่
MY_VARIABLE=fooภาษาส่วนใหญ่จะมีการตั้งชื่ออนุสัญญาสำหรับตัวแปรสไตล์ที่พบมากที่สุดที่ฉันเห็นในเชลล์สคริปต์คือ นี่เป็นอนุสัญญาหรือเป็นเพียงตัวแปรส่วนกลางเท่านั้น สิ่งที่เกี่ยวกับตัวแปรท้องถิ่นสคริปต์?

6
ฉันจะเพิ่ม (ลบ ฯลฯ ) สองตัวเลขด้วย bash ได้อย่างไร
ฉันสามารถอ่านตัวเลขและการดำเนินการด้วย: echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op แต่ความพยายามของฉันทั้งหมดเพื่อเพิ่มหมายเลขล้มเหลว: case "$op" in "+") echo num1+num2;; "-") echo `num1-num2`;; esac วิ่ง: First number please 1 Second mumber please 2 Operation? + เอาท์พุท: num1+num2 ...หรือ... echo $num1+$num2;; # results in: 1+2 ...หรือ... echo …

12
ฉันจะตรวจสอบว่ามีตัวแปรอยู่ในคำสั่ง 'if' ได้อย่างไร?
ฉันต้องการตรวจสอบการมีอยู่ของตัวแปรในifคำสั่ง สิ่งที่มีผลต่อ: if [ -v $somevar ] then echo "Variable somevar exists!" else echo "Variable somevar does not exist!" และคำถามที่ใกล้เคียงที่สุดคือคำถามนี้ซึ่งไม่ได้ตอบคำถามของฉัน
69 shell  variable  test 

5
ส่งผ่านตัวแปรเชลล์เป็น / pattern / ไปยัง awk
มีดังต่อไปนี้ในหนึ่งในฟังก์ชั่นเปลือกของฉัน: function _process () { awk -v l="$line" ' BEGIN {p=0} /'"$1"'/ {p=1} END{ if(p) print l >> "outfile.txt" } ' } ดังนั้นเมื่อเรียกว่าเป็น_process $arg, $argได้รับการส่งผ่านเป็น$1และนำมาใช้เป็นรูปแบบการค้นหา มันทำงานได้ด้วยวิธีนี้เพราะเชลล์ขยาย$1แทนรูปแบบ awk! นอกจากนี้ยังlสามารถนำมาใช้ภายในโปรแกรม awk -v l="$line"ถูกประกาศด้วย ทุกอย่างดี เป็นไปได้หรือไม่ที่จะให้รูปแบบการค้นหาเป็นตัวแปร การติดตามจะไม่ทำงาน awk -v l="$line" -v search="$pattern" ' BEGIN {p=0} /search/ {p=1} END{ if(p) print l >> "outfile.txt" …
59 shell  awk  quoting  variable 

10
วิธีกำหนดค่าสตริงให้กับตัวแปรผ่านหลายบรรทัดในขณะที่ย่อหน้า
ปัญหา: ฉันต้องการกำหนดค่าตัวแปรที่มีความยาวพอสมควร บรรทัดทั้งหมดของสคริปต์ของฉันต้องอยู่ภายใต้คอลัมน์จำนวนหนึ่ง ดังนั้นฉันพยายามกำหนดโดยใช้มากกว่าหนึ่งบรรทัด มันง่ายที่จะทำโดยไม่ต้องเยื้อง: VAR="This displays without \ any issues." echo "${VAR}" ผลลัพธ์: This displays without any issues. อย่างไรก็ตามด้วยการเยื้อง: VAR="This displays with \ extra spaces." echo "${VAR}" ผลลัพธ์: This displays with extra spaces. ฉันจะกำหนดอย่างหรูหราโดยไม่มีช่องว่างเหล่านี้ได้อย่างไร
54 variable 

2
ใน bash scripting อะไรคือความแตกต่างระหว่างการประกาศและตัวแปรปกติ?
ในการทุบตีสคริปต์: เราสร้างตัวแปรโดยการตั้งชื่อ: abc=ok หรือเราสามารถใช้ declare declare abc=ok ความแตกต่างคืออะไร และทำไมทุบตีทำหลายวิธีในการสร้างตัวแปร?


3
ทดสอบว่าสตริงมีสตริงย่อยหรือไม่
ฉันมีรหัส file="JetConst_reco_allconst_4j2t.png" if [[ $file == *_gen_* ]]; then echo "True" else echo "False" fi ฉันทดสอบว่าfileมี "gen" หรือไม่ ผลลัพธ์คือ "เท็จ" ดี! ปัญหาคือเมื่อฉันแทนที่ "gen" ด้วยตัวแปรtestseq: file="JetConst_reco_allconst_4j2t.png" testseq="gen" if [[ $file == *_$testseq_* ]]; then echo "True" else echo "False" fi ตอนนี้เอาต์พุตคือ "True" มันจะเป็นอย่างไร จะแก้ไขปัญหาได้อย่างไร


3
เหตุใดการเปิดไฟล์จึงเร็วกว่าการอ่านเนื้อหาตัวแปร
ในbashสคริปต์ฉันต้องการค่าต่าง ๆ จาก/proc/ไฟล์ จนถึงตอนนี้ฉันมีหลายสิบบรรทัด grepping ไฟล์โดยตรงเช่นนั้น: grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo ในความพยายามที่จะทำให้มีประสิทธิภาพมากขึ้นฉันบันทึกเนื้อหาของไฟล์ไว้ในตัวแปรแล้วทำสิ่งต่อไปนี้: a=$(</proc/meminfo) echo "$a" | grep -oP '^MemFree: *\K[0-9]+' แทนที่จะเปิดไฟล์หลายครั้งควรเปิดเพียงครั้งเดียวและ grep เนื้อหาตัวแปรซึ่งฉันคิดว่าน่าจะเร็วกว่า - แต่อันที่จริงมันช้ากว่า: bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null real 0m0.803s user 0m0.619s sys 0m0.232s bash 4.4.19 $ a=$(</proc/meminfo) bash 4.4.19 $ …


5
เราจะรันคำสั่งที่เก็บไว้ในตัวแปรได้อย่างไร?
$ ls -l /tmp/test/my\ dir/ total 0 ฉันสงสัยว่าทำไมวิธีต่อไปนี้ในการเรียกใช้คำสั่งด้านบนจึงล้มเหลวหรือสำเร็จ $ abc='ls -l "/tmp/test/my dir"' $ $abc ls: cannot access '"/tmp/test/my': No such file or directory ls: cannot access 'dir"': No such file or directory $ "$abc" bash: ls -l "/tmp/test/my dir": No such file or directory $ bash -c $abc 'my …
34 bash  shell  quoting  variable 

2
วิธีกำหนดเอาต์พุต cat ของสคริปต์ bash ให้กับตัวแปรในสคริปต์อื่น
ฉันมีสคริปต์ทุบตีที่สร้างเอาต์พุต cat เมื่อมีการโต้แย้ง ฉันยังมีสคริปต์ทุบตีอีกตัวหนึ่งที่เรียกใช้งานสคริปต์ทุบตีแรกด้วยอาร์กิวเมนต์ที่ฉันต้องการสร้างผลงาน cat ด้วย ฉันจะเก็บ cat เอาต์พุตที่สร้างโดยสคริปต์ทุบตีแรกในตัวแปรได้อย่างไร

4
ขอบเขตของตัวแปรท้องถิ่นในฟังก์ชั่นเชลล์
หลังจากอ่าน24.2 ตัวแปรท้องถิ่นผมคิดว่าการประกาศตัวแปรvarด้วยคำหลักlocalนั่นหมายความว่าvarค่า 's สามารถเข้าถึงได้เฉพาะภายในบล็อกของรหัสที่คั่นด้วยวงเล็บปีกกาของฟังก์ชั่น อย่างไรก็ตามหลังจากรันตัวอย่างต่อไปนี้ฉันพบว่าvarสามารถเข้าถึงได้อ่านและเขียนจากฟังก์ชั่นที่เรียกใช้โดยบล็อกของรหัสนั้น - เช่นแม้ว่าจะvarถูกประกาศlocalไปouterFuncแล้วinnerFuncก็ยังสามารถอ่านและแก้ไขค่าได้ Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.